我有2个节点
<example/>
和<example></example>
。
我如何区分它们?
在我看来,第一个是<xsl:when test="example">
,第二个是
<xsl:when test="example = ''">
。
我不认为这些是正确的 我很困惑。有人可以澄清一下吗?
提前致谢
答案 0 :(得分:1)
XML信息集和XPath数据模型表明<example/>
和<example></example>
之间没有区别:
http://www.w3.org/TR/xml-infoset/#omitted(D.7项)
http://www.w3.org/TR/2007/REC-xpath-datamodel-20070123/#ElementNode(在这里你找不到区分空元素的两种不同语法的属性:如果元素没有使用任何一种语法的子元素,则元素节点的构造方式相同)
答案 1 :(得分:1)
我如何区分它们?
您无法在XML工具中区分它们,因为它们是两种不同的方式来序列化完全相同的XML节点树。如果您的应用程序需要来区分两种情况 1 ,那么您将需要使用某种非XML工具,无论是排他性还是作为预处理步骤。
例如,如果您知道原始文件中没有字符串“/>
”的实例而不是空元素标记的一部分,那么您可以对原始文件进行文本替换(作为文本处理)以更改
/>
到
_wasEmpty="yes"/>
在将结果解析为XML之前,(包括前导空格),然后您的XSLT可以使用<xsl:when test="example[_wasEmpty = 'yes']">
区分。
1 我(以及SO上的许多其他人)会认为声称基于XML但需要区分XML所说的东西的应用程序从根本上被打破 - 这里的正确方法是与设计您正在使用的格式的人交谈,并要求他们更改它以便以XML兼容的方式区分案例,例如使用xsi:nil
。但我务实并且欣赏有时候这是不可能的; - )
答案 2 :(得分:1)
它们在设计上难以区分。你也可以写
<example />
或
<example ></example >
那些也无法区分。
这些变体旨在为人们创作或生成XML提供一些灵活性,而不会使使用XML的应用程序复杂化。
答案 3 :(得分:0)
在我看来 - 两种形式的空元素是相等的,不可能区分它们。
<xsl:when test="example">
测试是否存在名为“example”的元素。
<xsl:when test="example = ''">
测试元素的字符串值是否为空字符串。