如何使用XPath contains()

问题描述 投票:0回答:4

我的XML

<r>
  <ul>
    <li>ModelA</li>
    <bi>Foo</bi>
  </ul>
  <ul>
    <li>ModelB</li>
    <bi>boo</bi>
  </ul>
</r>

对于特定的节点值,我想提取后继节点的值。

当li = ModelA获得bi的值为Foo时的示例

我的Xpath://ul[li[contains(.,'ModelA')]]

xml xpath
4个回答
1
投票

您的XPath不包含bi,因此它不会选择bi-节点。

开始于

//ul/bi

选择bi节点。现在在方括号中添加条件。第一个条件是“父节点具有li-子节点:

//ul/bi[../li]

第二个条件是:li-节点包含文本:

//ul/bi[../li[contains(.,'ModelA')]]

但是,在有多个bi节点的情况下,这可能无法满足您的需求。如果确实只需要下一个bi节点,则the answer中的@Jack Fleeting可能是最好的。


1
投票

如果我正确理解了您的问题,可以解决这个问题:

//ul/li[contains(.,'ModelA')]/following-sibling::bi

编辑:在下面的评论中,@ Thomas Weller的正确观察之后,这是对此xpath表达式的简单解释:

您的目标<bi>是目标<ul>的孩子,目标<li>本身又有另一个孩子(//ul/li,因此是<li>部分),该孩子本身(即li[contains(.,'ModelA')])包含文本[C0 ])。由于<li><bi>都作为同一个<ul>,的子代,因此一旦找到<li>,下一站就是找到其同级<bi>(因此,最后一个/following-sibling::bi)。 >


0
投票

如果不需要继承者–如果sibling


0
投票

您为什么要为此使用contains()?只需使用“ =”。

© www.soinside.com 2019 - 2024. All rights reserved.