文档似乎是null但我可以得到第一个元素

时间:2014-12-31 12:23:05

标签: java xml dom

我使用此代码构建DOM文档:

private org.w3c.dom.Document createXml(WorkObject workObject, String hierarchy, String dateFormat) {
    XMLBuilder2 builder = XMLBuilder2.create(hierarchy);
    Map<String, Object> localVariables = workObject.getLocalVariablesMap();
    builder = createXmlFromMap(localVariables, builder, dateFormat);
    Properties outputProperties = new Properties();
    outputProperties.put(javax.xml.transform.OutputKeys.OMIT_XML_DECLARATION, "no");
    String xmlString = builder.asString(outputProperties);
    LOG.debug("XML string: " + xmlString);
    org.w3c.dom.Document xmlDoc = builder.getDocument();
    LOG.debug("DOM root element: " + xmlDoc.getDocumentElement().getTagName());
    return xmlDoc;
}

builder.asString()调用返回预期的XML:

<?xml version="1.0" encoding="UTF-8"?>
<root>
    <myVar>a value</myVar>
    <docId>GEAR-b3384419-36f8-48fc-b194-c937e7afc0dd</docId>
</root>

最后一个LOG语句的输出符合预期root

但是当我使用这段代码时,xmlDoc似乎很奇怪......

xmlDoc传递给此构造函数时:

private org.w3c.dom.Document mXmlDoc;

public XmlMailMergeDataSet(org.w3c.dom.Document xmlDoc) {
    mXmlDoc = xmlDoc;
}

在IDEA中调试时,xmlDocmXmlDoc的值为[#document: null]

不幸的是,我无法进一步调试以查看当时发生的事情,因为传递XmlMailMergeDataSet的代码不是开源的。

我错过了一些明显的东西吗?

1 个答案:

答案 0 :(得分:1)

[#document: null]并不意味着Document引用为空,也不是树是空的。它只是作为评估xmlDoc.toString())的结果的字符串表示。我想null这里是&#34;节点值&#34;文档节点在这种情况下没有意义(DocumentNode的特殊子类型。)

因此Document实例在您的代码中似乎没有任何问题。