Java XML DocumentBuilderFactory从空值</tag>写入空标记<tag>

时间:2013-01-27 22:24:12

标签: java xml xsd

嘿所以我想知道如何使用<Category />编写一个空标记DocumentBuilderFactory(基于此resource,库 {{1} } ),至于我必须应用if条件javax.xml.parsers.*;,然后创建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);
}

我注意到如果我添加一个null的textnode,<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);错误。有没有办法配置变换器知道TextNode有意留空?然后创建NullException<Category />

1 个答案:

答案 0 :(得分:1)

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

这里我无条件地将category元素添加到Rows,但只有getCategory()非空时才添加文本节点子元素。如果为null,则会创建一个空的category元素,该元素将序列化为<category />的XML。

如果您希望能够在XML中区分null的{​​{1}}值和空字符串值,那么通常的XML模式习惯用法是使元素“可以为空”

excel.getCategory()

并用<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" />