我是XPath的新手,我正在创建一个XPath表达式来检索以下xml的多个元素
<ol>
<li>
<a data- key="abc(/parent)" value="superval)">Parent</a>
<ol>
<li>
<a data-key="abc(/parent/1)" data-value="parent-val">Parent/1</a>
<ol>
<li>
<a data-key="abc(/parent/1/1)" data-value="xyz">Parent/1/1</a>
</li>
<li>
<a data-key="abc(/parent/1/2)" data-value="xyz">Parent/1/2</a>
</li>
<li>
<a data-key="abc(/parent/1/3)" data-value="xyz">Parent/1/3</a>
</li>
<li>
<a data-key="abc(/parent/1/4)" data-value="xyz">Parent/1/4</a>
</li>
</ol>
</li>
</ol>
</li>
<li>
<a data-key="bcd/(parent1)" value="superval">Parent1</a>
<ol>
<li>
<a data-key="bcd(/parent1/1)" data-value="parent-val">Parent1/1</a>
<ol>
<li>
<a data-key="bcd(/parent1/1/1)" data-value="xyz">Parent1/1/1</a>
</li>
<li>
<a data-key="bcd(/parent1/1/2)" data-value="xyz">Parent1/1/2</a>
</li>
<li>
<a data-key="bcd(/parent1/1/3)" data-value="xyz">Parent1/1/3</a>
</li>
<li>
<a data-key="bcd(/parent1/1/4)" data-value="xyz">Parent1/1/4</a>
</li>
</ol>
</li>
</ol>
</li>
</ol>
上面的xml只是一个示例,每个父级都可以包含多个子级值。我需要搜索从say(parent/1/1/1
)到(parent/1/1/4
)开头的数据键值的元素,并且这些键提取与其关联的属性value
的值。数据键值也可以跨越不同的父级,如(parent/1/1/1
)到(parent/1/1/2
)。
我需要为上面两个场景创建XPath表达式。我尝试过使用这个XPath表达式
//*[@data-key='abc(/parent/1/1/1)']
但它只给了我一个<a>
元素,因为我需要一系列元素。我对XPath完全不熟悉,所以在这方面的任何帮助都会很有用。
非常感谢提前。 Asheesh
答案 0 :(得分:0)
尝试使用contains()函数,其中包含您正在寻找的范围,如下所示:
//*[contains(@data-key,'abc(/parent/1/1/)')]
这将为您提供具有至少具有根的数据键的所有节点,例如在(parent / 1/1/1)到(parent / 1/1/4)的示例中。虽然您提供的xml片段不包含该范围的数据键,但您可以编辑所需的斜杠/数字。