需要解释 XPath 语法

Need explanation of XPath syntax

谁能解释一下下面写的XPath语法:

xmlDoc.documentElement.selectNodes("//*/Expression[.!='']")

基本上,我需要澄清上述语法的参数路径。

//*

Select XML 文档中任意位置的任何元素

/Expression[.!='']

然后从该元素中获取所有 直接子元素 <Expression> 具有非空值的元素。

Select 所有 <Expression> 个元素,其中:

  1. 不是根元素
  2. 并且有非空值

//*/ - 这意味着除了 root

Expression - 元素名称

[.!=''] - 这意味着当前节点值不为空,即当前节点 . 不是 !=''

//* 选择 所有 个元素。

//*/Expression 选择所有 Expression child 元素。

//*/Expression[.!=''] 选择 非空 string-values 的所有 Expression 个子元素。

XML Path Language (XPath):

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 元素 e4e5e6 将被选中 因为它们都有非空字符串-值。