gpt4 book ai didi

Java XML DocumentBuilderFactory 从 null 值写入空标签

转载 作者:行者123 更新时间:2023-12-01 14:53:33 26 4
gpt4 key购买 nike

嘿,所以我想知道如何编写一个空标签,例如 <Category />DocumentBuilderFactory (基于此 resource ,库 javax.xml.parsers.*; ),目前我必须应用 if 条件 if object.getCategory() != null然后创建Category Tag否则忽略它。

//add the Category
if(excel.getCategory() != null){
Element Category = doc.createElement("category");
Category.appendChild(doc.createTextNode(excel.getCategory()));
Rows.appendChild(Category);
}

和架构

<xs:complexType name="data">
<xs:all>
<xs:element name="Category" type="xs:string" minOccurs="1" />
<!-- other columns.. -->
</xs:all>
</xs:complexType>

我注意到如果我添加一个空的文本节点,transformer.transform(source, result);将返回一堆 NullException错误。有没有办法配置转换器以了解 TextNode 故意留空?并依次创建 <Category /><Category></Category> .

最佳答案

//add the Category
Element Category = doc.createElement("category");
Rows.appendChild(Category);
if(excel.getCategory() != null){
Category.appendChild(doc.createTextNode(excel.getCategory()));
}

这里我添加 category元素至Rows无条件,但仅添加文本节点子节点 if getCategory()是非空的。如果为空,那么这将创建一个空的 category元素,它将序列化为 XML 为 <category /> .

如果您希望能够在 XML 中区分null值为 excel.getCategory()和一个空字符串值,那么通常的 XML 模式习惯用法就是使元素“可为空”

<xs:complexType name="data">
<xs:all>
<xs:element name="Category" type="xs:string" nillable="true" />
<!-- other columns.. -->
</xs:all>
</xs:complexType>

并用 xsi:nil 标记它

//add the Category
Element Category = doc.createElement("category");
Rows.appendChild(Category);
if(excel.getCategory() != null){
Category.appendChild(doc.createTextNode(excel.getCategory()));
} else {
Category.setAttributeNS(XMLConstants.W3C_XML_SCHEMA_INSTANCE_NS_URI,
"xsi:nil", "true");
}

这将产生

<category />

excel.getCategory().equals("")

<category xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true" />

excel.getCategory() == null

关于Java XML DocumentBuilderFactory 从 null 值写入空标签 <Tag/>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14553022/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com