3

我们如何在 DOM 文档中创建一个空节点,而不用java.lang.NullPointerException在编写 XML 文件时获取Transformer

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

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

如果我只是简单地用空值编写此节点,则在将 Document 转换为 XML 时Transformerthrows 。NullPointerException

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

4

2 回答 2

4

如果您使用的是 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);

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

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

<root>
  <textNode>not empty</textNode>
  <emptyTextNode/>
  <emptyNode/>
  <nullTextNode/>
</root>
于 2014-03-20T03:15:35.483 回答
3

好吧,我在这里发现了我的错误,

我正在使用element.appendChild(documnet.createTextNode(nodeValue));将空值或空值写入节点。这是不正确的。

我应该简单地创建元素并保持这样,而不尝试将 null 写为 TextNode 值。因为空或 null 永远不能是 TextNode。

所以,我必须在我的代码中格外小心,避免尝试写入空值。换句话说,首先检查该值,如果它不为 null,则仅写入 TextNode 否则只需写入 Element 并在转换时将其留给序列化程序进行解释。

Element childElem = document.createElement("Child");
rootElement.appendChild(childElem);

现在,如果某个字符串不为空,那么只有,

childElem.appendChild(document.createTextNode(someString));
于 2014-03-20T03:14:57.410 回答