我正在搜索一个XPath字符串(对于VBA Excel),它可以查找特定级别上的所有节点,并且仅在它们具有特定(大)子节点时才返回。无论这种嵌套是多么“深刻”。关系:我不知道一个特定的孩子嵌套有多深,因此我无法建立固定的路径。
如果是以下示例。我正在搜索直接在根目录下的所有节点,哪些节点包含名为'Test'的任何子节点
XML STRING:
<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"]")
我需要的不是2条路径的“联合”,而是“重叠”。有人知道怎么做吗?
答案 0 :(得分:4)
以下XPath表达式选择您需要的内容:
/Program/*[.//@name='Test']
它会抓取Program
的所有直接子项,然后选择name
属性值为'Test'
或包含后代的那些。{/ p>
这个表达式的更详细,也许更可读的版本是:
/Program/*[descendant-or-self::*/attribute::name='Test']
所以你的VBA代码看起来像这样:
mlDoc.selectNodes("/Program/*[descendant-or-self::*/attribute::name='Test']")