4

次のように JAXP を使用してドキュメントを作成しました。

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document document = builder.newDocument();
Element rootElement = document.createElement("Root");

for (MyObject o : myCollection) {
    Element entry = document.createElement("Entry");
    Element entryItem = document.createElement("EntryItem");
    entryItem.appendChild(document.createTextNode(o.getProperty()));

    entry.appendChild(entryItem);
    rootElement.appendChild(entry);
}

document.appendChild(rootElement);

ここで、ドキュメントの XML を次のように出力しようとすると、次のようになります。

Transformer transformer = TransformerFactory.newInstance().newTransformer();
transformer.setOutputProperty(OutputKeys.INDENT, "yes");
DOMSource source = new DOMSource(document);
StreamResult result = new StreamResult(new StringWriter());
transformer.transform(source, result);
System.out.println(result.getWriter().toString());

transformer.transform次のエラーで行がバラバラになります:

FATAL ERROR:  'java.lang.NullPointerException'
       :null

これをデバッグするにはどうすればよいですか? が null でないことtransformerを確認しました。sourceresult

4

2 に答える 2

2

私はこれを推測しています:

entryItem.appendChild(document.createTextNode(o.getProperty()));

null 値を持つテキスト ノードを作成しました。Xerces のコード (Oracle の JDK 1.6 に同梱されているデフォルトの JAXP 実装) を見ると、テキスト ノードの構築時に null 検証が行われていないことがわかります。それが後でTransformer死ぬのではないかと思います。

それか、JAXp の設定に問題があります。

jaxp.debugJAXP トレース情報を取得するために、システム プロパティ (利用可能な JDK 1.6+) を設定することができます。

于 2010-10-23T05:59:29.447 に答える
0

――ドキュメントはいかがですか?

申し訳ありませんが、明らかに 2 番目の部分は最初の部分に続きます :) どのパーサーを使用していますか?

于 2010-10-09T16:12:58.217 に答える