在 DOM 文档中创建空文本节点

Ind*_*igo 4 java xml string transformer-model domdocument

java.lang.NullPointerException在使用 编写 XML 文件时,如何在不获取的情况下在 DOM 文档中创建一个空节点Transformer

我正在编写一个 XML 文档,其中一些节点可能具有空值,使用element.appendChild(documnet.createTextNode(nodeValue));

这里这个nodeValue可以是一个空字符串,或者说null或空值,那么我们如何强制它写入这个空文本节点,例如<emptyTextNode/> or <emptyTextNode><emptyTextNode>

如果我只是简单地用空值写入此节点,Transformer则会抛出异常NullPointerException,同时将文档转换为 XML。

无论如何,都需要避免此空指针异常,并在输出 XML 条件中允许此空节点。

hel*_*cha 5

如果您使用 Java SE org.w3c.dom,则仅在附加null子项时才会得到 NullPointerException。如果您不附加子节点空文本节点,您将得到一个空元素,但不是NullPointerException.

例如,假设您在 DOM 中创建这些元素:

Element root = doc.createElement("root");

Element textNode = doc.createElement("textNode");
Element emptyTextNode = doc.createElement("emptyTextNode");
Element emptyNode = doc.createElement("emptyNode");
Element nullNode = doc.createElement("nullTextNode");

textNode.appendChild(doc.createTextNode("not empty")); // <textNode>not empty</textNode>
emptyTextNode.appendChild(doc.createTextNode(""));     // <emptyTextNode></emptyTextNode>
// emptyNode: no child appended                           <emptyNode /> 
nullNode.appendChild(null);                            // null child appended - causes NPE!!

root.appendChild(textNode);
root.appendChild(emptyTextNode);
root.appendChild(emptyNode);
root.appendChild(nullNode);
Run Code Online (Sandbox Code Playgroud)

只有nullNode原因NullPointerException。为了避免这种情况,你应该保证它nodeValue不为空,但它可以是一个空字符串。

如果导致 NPE 的行被注释掉,结果将是:

<root>
  <textNode>not empty</textNode>
  <emptyTextNode/>
  <emptyNode/>
  <nullTextNode/>
</root>
Run Code Online (Sandbox Code Playgroud)