在DOM Document中创建空文本节点



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

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

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

如果我只是简单地用空值写这个节点,Transformer抛出NullPointerException,同时将文档转换为XML。

需要避免此nullpointer异常,并允许在输出XML中出现此空节点。

如果您正在使用Java SE org.w3c。dom你只会得到NullPointerException如果你附加一个null子。如果您追加no child空文本节点,您将得到一个空元素,但不是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>

好了,我发现我错了,

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

我应该只是简单地创建元素,并保持它像这样,不试图写null作为TextNode值。因为empty或null不能是TextNode。

因此,我必须在代码中格外小心,避免尝试编写空值。换句话说,首先检查值,如果它不是null,那么只写为TextNode,否则只写Element,让序列化器在转换时解释它。

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

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

childElem.appendChild(document.createTextNode(someString));

相关内容

  • 没有找到相关文章

最新更新