Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xml 区分现有节点和空节点_Xml_Xslt - Fatal编程技术网

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   >