3

我试图让它返回带有属性的空根元素,但得到 [#document: null] 输出。我绝对需要有一个根的子元素吗?

String docDate = "1";
String docNumber = "1";
String orderType = "1";
String transactionType = "1";

try {
    DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
    DocumentBuilder docBuilder = docFactory.newDocumentBuilder();

    Document doc = docBuilder.newDocument();

    Element rootElement = doc.createElement("InvoiceRequest");

    Attr attr = doc.createAttribute("documentDate");
    attr.setValue(docDate);
    rootElement.setAttributeNode(attr);

    Attr attr2 = doc.createAttribute("documentNumber");
    attr2.setValue(docNumber);
    rootElement.setAttributeNode(attr2);

    Attr attr3 = doc.createAttribute("orderType");
    attr3.setValue(orderType);
    rootElement.setAttributeNode(attr3);

    Attr attr4 = doc.createAttribute("transactionType");
    attr4.setValue(transactionType);
    rootElement.setAttributeNode(attr4);

    doc.appendChild(rootElement);
    System.out.println("doc: " + doc.toString());
} catch (Exception e) { 
    e.printStackTrace();
}
4

2 回答 2

1

DocumentImpl是 的子类NodeImpl,其toString()实现如下:

public String toString() {
    return "["+getNodeName()+": "+getNodeValue()+"]";
}

getNodeName()返回#document(这是有道理的) - 这在CoreDocumentImpl. getNodeValue()返回null,因为它没有被覆盖。文档中甚至提到了这种行为Node

如果没有针对特定节点类型的这些属性的明显映射(例如,元素的 nodeValue 或 Comment 的属性),则返回 null。

因为您的根元素不包含在getNodeName()orgetNodeValue()中,所以它可能看起来是空的。但没有什么可担心的。您需要其他方法将文档呈现为 XML 字符串。

于 2015-07-29T18:08:05.457 回答
0

您在这里使用的toString()方法什么都不做,只是返回:-

"["+getNodeName()+": "+getNodeValue()+"]"

所以相应地你得到: -

[#document: null] //nodeName as document and null nodevalue

别担心,继续做进一步的处理,你会得到你想要的结果,而不是NPE.

于 2015-07-29T18:12:46.230 回答