DocumentBuilder doc(带有根元素)输出 null,即使附加了根元素
DocumentBuilder doc (with root element) outputs null even though root element is appended
我试图让它 return 我的空根元素具有属性,但得到 [#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();
}
DocumentImpl
是NodeImpl
的子类,其toString()
实现如下:
public String toString() {
return "["+getNodeName()+": "+getNodeValue()+"]";
}
getNodeName()
returns #document
(这是有道理的)——这是在 CoreDocumentImpl
中定义的。 getNodeValue()
returns null
因为它没有被覆盖。 Node
文档中甚至提到了这种行为:
In cases where there is no obvious mapping of these attributes for a specific nodeType (e.g., nodeValue for an Element or attributes for a Comment ), this returns null.
因为您的根元素未包含在 getNodeName()
或 getNodeValue()
中,它可能看起来是空的。但没有什么可担心的。您需要 other methods 才能将文档呈现为 XML 字符串。
您在这里使用的 toString()
方法只是返回:-
"["+getNodeName()+": "+getNodeValue()+"]"
所以相应地你得到:-
[#document: null] //nodeName as document and null nodevalue
别担心,继续做进一步的处理,您会得到预期的结果,而不是 NPE
。
我试图让它 return 我的空根元素具有属性,但得到 [#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();
}
DocumentImpl
是NodeImpl
的子类,其toString()
实现如下:
public String toString() {
return "["+getNodeName()+": "+getNodeValue()+"]";
}
getNodeName()
returns #document
(这是有道理的)——这是在 CoreDocumentImpl
中定义的。 getNodeValue()
returns null
因为它没有被覆盖。 Node
文档中甚至提到了这种行为:
In cases where there is no obvious mapping of these attributes for a specific nodeType (e.g., nodeValue for an Element or attributes for a Comment ), this returns null.
因为您的根元素未包含在 getNodeName()
或 getNodeValue()
中,它可能看起来是空的。但没有什么可担心的。您需要 other methods 才能将文档呈现为 XML 字符串。
您在这里使用的 toString()
方法只是返回:-
"["+getNodeName()+": "+getNodeValue()+"]"
所以相应地你得到:-
[#document: null] //nodeName as document and null nodevalue
别担心,继续做进一步的处理,您会得到预期的结果,而不是 NPE
。