2

我正在搜索一个 XPath 字符串(用于 VBA Excel),它可以查找特定级别上的所有节点,并且仅在它们具有特定(大)子节点的情况下才返回。不管嵌套有多“深”。关系:我不知道特定孩子的嵌套有多深,因此我无法制定固定路径。

在以下示例的情况下。我正在搜索根目录下的所有节点 '' 并且有任何包含名称 'Test' 的子节点


XML 字符串:

<Program>
   <AA name="1"/>
   <BB name="2">
      <CC name="Test"/>
   </BB>
   <DD name="Test"/>
   <EE name="3">
      <FF name="4">
         <GG name="Test"/>
      </FF>
   </EE>
</Program> 


要求的选择:

Item(0) = <BB name="2">
Item(1) = <DD name="Test">
Item(2) = <EE name="3">


下面的 XPath 表达式给出了下面的节点Program

xmlDoc.selectNodes("/Program/*")


以下 XPath 表达式给出了包含名称的节点Test

xmlDoc.selectNodes("//*[@name="Test"]")

我需要的不是两条路径的“联合”,而是“重叠”。有人知道怎么做吗?

4

1 回答 1

4

以下 XPath 表达式选择您需要的内容:

/Program/*[.//@name='Test']

它获取所有直接子级Program,然后选择具有name属性值'Test'或包含具有的后代的那些。

此表达式的更详细且可能更易读的版本是:

 /Program/*[descendant-or-self::*/attribute::name='Test']

因此,您的 VBA 代码可能如下所示:

mlDoc.selectNodes("/Program/*[descendant-or-self::*/attribute::name='Test']")
于 2012-11-13T10:16:53.820 回答