我需要检查XML节点是否至少有一个非空子节点.应用于此XML表达式应该返回true
<xml>
<node>
<node1/>
<node2/>
<node3>value</node3>
</node>
</xml>
Run Code Online (Sandbox Code Playgroud)
我试图使用这个表达式:<xsl:if test="not(/xml/node/child::* = '')">但似乎检查所有孩子是否都不是空的.
true如果至少有一个元素不为空,我该怎么写一个返回的表达式?有没有办法在不创建另一个模板来迭代节点chldren的情况下执行此操作?
UPD:我正在考虑计算非空节点,
test="count(not(/xml/node/child::* = '')) > '0'"
但不知何故只是无法正常工作.这个表达不是一个良好的表达.
Dim*_*hev 33
更准确,更简单,更高效(无需使用该count()功能):
/*/node/*[text()]
Run Code Online (Sandbox Code Playgroud)
如果要排除任何仅包含仅空白文本子元素的元素,请使用:
/*/node/*[normalize-space()]
Run Code Online (Sandbox Code Playgroud)
Ian*_*rts 11
你只需要<xsl:if test="/xml/node/* != ''" />.
在XPath中=或!=比较中,如果集合中的任何节点通过比较,则一侧是节点集,另一侧是字符串成功.从而
not(x = '')
Run Code Online (Sandbox Code Playgroud)
表示" x当前节点的任何子元素都不具有空字符串值",这与根本不同
x != ''
Run Code Online (Sandbox Code Playgroud)
这意味着" x当前节点的至少一个子元素具有非空的字符串值".特别是,如果要检查所有 x子项是否为空,则需要使用"双阴性"测试
not(x != '')
Run Code Online (Sandbox Code Playgroud)