Java 在DOM文档中创建空文本节点
在使用Java 在DOM文档中创建空文本节点,java,xml,domdocument,string,transformer,Java,Xml,Domdocument,String,Transformer,在使用Transformer编写XML文件时,如何在DOM文档中创建空节点而不获取java.lang.NullPointerException 我正在使用element.appendChild(documnet.createTextNode(nodeValue))编写一个XML文档,其中一些节点可能具有空值 在这里,这个nodeValue可以是一个空字符串,也可以说是null或空值,那么我们如何强制它编写这个空文本节点,比如或 如果我只是用空值编写这个节点,Transformer在将文档转换为X
Transformer
编写XML文件时,如何在DOM文档中创建空节点而不获取java.lang.NullPointerException
我正在使用element.appendChild(documnet.createTextNode(nodeValue))编写一个XML文档,其中一些节点可能具有空值代码>
在这里,这个nodeValue可以是一个空字符串,也可以说是null或空值,那么我们如何强制它编写这个空文本节点,比如或
如果我只是用空值编写这个节点,Transformer
在将文档转换为XML时抛出NullPointerException
需要避免此空指针异常,并允许此空节点以输出XML的方式运行。好吧,我在这里发现了错误
我正在使用element.appendChild(documnet.createTextNode(nodeValue))
将空值或空值写入节点。这是不正确的
我应该简单地创建元素并让它保持这样,而不尝试将null写为TextNode值。因为empty或null永远不能是TextNode
因此,我必须在代码中格外小心,避免尝试编写空值。
换句话说,首先检查该值,如果该值不为null,则仅作为TextNode写入,否则只需写入元素,并让序列化程序在转换时对其进行解释
Element childElem = document.createElement("Child");
rootElement.appendChild(childElem);
如果某个字符串不是空的,那么
childElem.appendChild(document.createTextNode(someString));
如果您使用的是Java SE org.w3c.dom,那么只有在附加null
子级时,才会得到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);
谢谢,我已经意识到了我的错误,但是这个答案有助于从技术上更好地理解这个问题。重要的是空字符串也可以工作,所以最好先用空字符串替换所有空值。在我的例子中,将小数据库表中的null值更新为空字符串。
<root>
<textNode>not empty</textNode>
<emptyTextNode/>
<emptyNode/>
<nullTextNode/>
</root>