需要解释 XPath 语法
Need explanation of XPath syntax
谁能解释一下下面写的XPath语法:
xmlDoc.documentElement.selectNodes("//*/Expression[.!='']")
基本上,我需要澄清上述语法的参数路径。
//*
Select XML 文档中任意位置的任何元素
/Expression[.!='']
然后从该元素中获取所有 直接子元素 <Expression>
具有非空值的元素。
Select 所有 <Expression>
个元素,其中:
- 不是根元素
- 并且有非空值
//*/
- 这意味着除了 root
Expression
- 元素名称
[.!='']
- 这意味着当前节点值不为空,即当前节点 .
不是 !=
空 ''
//*
选择 所有 个元素。
//*/Expression
选择所有 Expression
child 元素。
//*/Expression[.!='']
选择 非空 string-values 的所有 Expression
个子元素。
The string-value of an element node is the concatenation of the
string-values of all text node descendants of the element node in
document order.
注意:这不等同于empty。空元素根本没有子元素。
考虑一个例子:
<Expression id="e1">
<Expression id="e2"/>
<Expression id="e3"><c/></Expression>
<Expression id="e4">
<b/>
</Expression>
<Expression id="e5">
<a>text1</a>
</Expression>
<Expression id="e6">test2<c/></Expression>
</Expression>
Expression
e1
不会被选择 因为作为根元素它不是 child任何其他元素。
Expression
e2
不会被选中 因为它的字符串值为 ''.
Expression
e3
不会被选中 因为它的字符串值为 '',即使 e3
本身不是空的。
Expression
元素 e4
、e5
和 e6
将被选中 因为它们都有非空字符串-值。
谁能解释一下下面写的XPath语法:
xmlDoc.documentElement.selectNodes("//*/Expression[.!='']")
基本上,我需要澄清上述语法的参数路径。
//*
Select XML 文档中任意位置的任何元素
/Expression[.!='']
然后从该元素中获取所有 直接子元素 <Expression>
具有非空值的元素。
Select 所有 <Expression>
个元素,其中:
- 不是根元素
- 并且有非空值
//*/
- 这意味着除了 root
Expression
- 元素名称
[.!='']
- 这意味着当前节点值不为空,即当前节点 .
不是 !=
空 ''
//*
选择 所有 个元素。
//*/Expression
选择所有 Expression
child 元素。
//*/Expression[.!='']
选择 非空 string-values 的所有 Expression
个子元素。
The string-value of an element node is the concatenation of the string-values of all text node descendants of the element node in document order.
注意:这不等同于empty。空元素根本没有子元素。
考虑一个例子:
<Expression id="e1">
<Expression id="e2"/>
<Expression id="e3"><c/></Expression>
<Expression id="e4">
<b/>
</Expression>
<Expression id="e5">
<a>text1</a>
</Expression>
<Expression id="e6">test2<c/></Expression>
</Expression>
Expression
e1
不会被选择 因为作为根元素它不是 child任何其他元素。
Expression
e2
不会被选中 因为它的字符串值为 ''.
Expression
e3
不会被选中 因为它的字符串值为 '',即使 e3
本身不是空的。
Expression
元素 e4
、e5
和 e6
将被选中 因为它们都有非空字符串-值。