在DOM Document中创建空文本节点

时间:2014-03-20 02:56:04

标签: java xml domdocument string transformer

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

我正在使用element.appendChild(documnet.createTextNode(nodeValue));

编写一个XML文档,其中一些节点可能包含空值

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

如果我只是简单地用空值编写此节点,Transformer会抛出NullPointerException,同时将Document转换为XML。

这个nullpointer异常需要避免,并且无论如何都要在输出XML中允许这个空节点。

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:2)

嗯,我在这里发现了我的错误,

我正在使用element.appendChild(documnet.createTextNode(nodeValue));将空值或空值写入节点。哪个不对。

我应该只是创建Element并保持这样,而不尝试将null写为TextNode值。由于empty或null永远不能是TextNode。

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

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

现在,如果某些String不为null,则仅为

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