0

ねえ、たとえば(このリソース、ライブラリに基づい<Category />て)空のタグをどのように書くことができるのか疑問に思っています。今のところ、if条件を適用してから、それ以外の場合は無視して作成する必要があります。DocumentBuilderFactoryjavax.xml.parsers.*;if object.getCategory() != nullCategory 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>

また、nullのtextnodeを追加すると、エラーtransformer.transform(source, result);のヒープが返されることに気づきました。NullExceptionTextNodeが意図的に空のままになっていることを知るようにトランスフォーマーを構成する方法はありますか?<Category />次に、またはを作成します<Category></Category>

4

1 に答える 1

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

ここでは、category要素を無条件に追加していますが、がnullでないRows場合にのみテキストノードの子を追加しています。getCategory()nullの場合、空のcategory要素が作成され、XMLにシリアル化されます<category />

nullXMLで、の値と空の文字列値を区別できるようにするexcel.getCategory()場合、そのための通常のXMLスキーマイディオムは、要素を「nillable」にすることです。

<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

于 2013-01-27T22:29:05.533 に答える