[英]DocumentBuilder doc (with root element) outputs null even though root element is appended
我试图让它返回我的空根元素与属性,但我得到[#document:null]输出。 我绝对需要为root提供子元素吗?
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()
返回#document
(这很有意义) - 这是在CoreDocumentImpl
定义的。 getNodeValue()
返回null
因为它未被覆盖。 在Node
文档中甚至提到了这种行为:
如果特定nodeType没有明显的这些属性映射(例如,Element的nodeValue或Comment的属性),则返回null。
由于您的根元素未包含在getNodeName()
或getNodeValue()
,因此它可能看起来是空的。 但没有什么可担心的。 您需要其他方法将文档呈现为XML字符串。
你在这里使用的toString()
方法只是返回: -
"["+getNodeName()+": "+getNodeValue()+"]"
所以相应地你得到: -
[#document: null] //nodeName as document and null nodevalue
不要担心并继续进行进一步处理,您将获得预期的结果,而不是NPE
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.