为什么在XML中设置空文本节点不是错误?

时间:2017-06-08 20:27:21

标签: java xml dom

示例输入:

 <p>    </p>

示例代码:

 // assume node is the 'p' Element, then chNode is a text node
 chNode = node.getFirstChild(); 

 // set text to empty string
 chNode.setNodeValue("");

我原以为设置空文本是一个错误,或者它会删除文本节点。

因为,我们有一个带有空文本节点的p元素。但是,如果我们删除了文本节点,它会不是一回事?

我正在尝试理解空文本节点的用途。

2 个答案:

答案 0 :(得分:1)

  

我原以为设置空文本是一个错误,或者它会删除文本节点。

没有错误,因为它仍然是有效的文档。

  

但是,如果我们删除了文本节点,它会不是一回事?

没有。在结构方面,空元素与已删除元素不同。

  

我正在尝试理解空文本节点的用途。

空元素本身没有含义。谁赋予意义的是使用XML文档的人或应用程序。

这三个文件语法上彼此不同:

<root></root>
<root><p></p></root>
<root><p>    </p></root>

对于给定的目的,它们可能意味着相同,但对于定义XML语法的XML规范,它们是不同的。

答案 1 :(得分:1)

DOM在执行约束方面往往非常放松;实际上,它甚至没有花费太多精力来指定约束。 XSLT / XPath / XQuery使用的XDM模型更加严格:它允许一个独立的零长度文本节点,但只要您尝试将这样的节点添加到树中,它就会消失。至少在这种情况下,它并不是一个真正的问题,因为DOM可以以明显的方式被序列化为格式良好的词法XML。在其他情况下,您可以在DOM中创建无法序列化为格式良好的XML的结构(例如,节点中的无效XML字符,或具有命名空间URI但没有前缀的属性)。