Xml 区分现有节点和空节点
我有两个节点Xml 区分现有节点和空节点,xml,xslt,Xml,Xslt,我有两个节点 和 我如何区分它们 在我看来,第一个是,第二个是 我认为这些都不对 我对此感到困惑。谁能澄清一下吗 在我看来,这两种形式的空元素是相等的,不可能区分它们 测试是否存在名为“example”的元素 测试元素的字符串值是否为空字符串。XML信息集和XPath数据模型声明和之间没有区别: (项目D.7) (对于空元素,找不到区分两种不同语法的属性:如果元素没有使用任一语法的子元素,则元素节点的构造方式相同) 我如何区分它们 在XML工具中无法区分它们,因为它们是完全相同的XML节点树的
和
我如何区分它们
在我看来,第一个是
,第二个是
我认为这些都不对
我对此感到困惑。谁能澄清一下吗
在我看来,这两种形式的空元素是相等的,不可能区分它们
测试是否存在名为“example”的元素
测试元素的字符串值是否为空字符串。XML信息集和XPath数据模型声明
和
之间没有区别:
(项目D.7)
(对于空元素,找不到区分两种不同语法的属性:如果元素没有使用任一语法的子元素,则元素节点的构造方式相同)
我如何区分它们
在XML工具中无法区分它们,因为它们是完全相同的XML节点树的两种不同序列化方式。如果您的应用程序需要区分这两种情况1,那么您需要使用某种非XML工具,无论是独占的还是作为预处理步骤
例如,如果您知道除了作为空元素标记的一部分之外,原始文件中没有字符串“/>
”的实例,则可以对原始文件进行文本替换(视为文本),以更改字符串的所有实例
/>
进入
(包括前导空格)然后将结果解析为XML,然后XSLT可以使用
进行区分
1我(以及其他许多人)可能会争辩说,一个声称基于XML但需要区分XML所说的等价物的应用程序从根本上被破坏了——这里正确的方法是与设计您所使用的格式的人交谈,并要求他们更改格式,以便以与XML兼容的方式(例如使用
xsi:nil
。但我是务实的,并且理解有时候这是不可能的;-) 它们在设计上无法区分。你也可以写
<example />
或
这些也无法区分
这些变体旨在为编写或生成XML的人员提供一定的灵活性,而不会使使用XML的应用程序复杂化。第二种说法不正确,因为它只测试元素的字符串值是否为空字符串。对于
它将测试为true,但在这种情况下
元素不是空的。要测试
子元素是否为空,请使用test=“not(example/node())”
。你是对的-我的错。我改进了我的答案。感谢您的评论。注意:test=“example”是一个测试,如果节点存在,那么它在两种情况下都存在,因此对这两种情况都适用。这也适用于第二种情况,因为两个示例子节点都包含空字符串。
<example />
<example ></example >