【问题标题】:Possible to use following-sibling axis multiple times in XPath?可以在 XPath 中多次使用跟随兄弟轴吗?
【发布时间】:2017-03-22 21:24:23
【问题描述】:
<div>
    <pre>
        <span class="attr">id:</span>
        <span class="text">1</span>
        <span class="attr">time:</span>
        <span class="text">42</span>
        <span class="attr">length:</span>
        <span class="text">74</span>

        <span class="attr">id:</span>
        <span class="text">2</span>
        <span class="attr">time:</span>
        <span class="text">57</span>
        <span class="attr">length:</span>
        <span class="text">74</span>
    </pre>
</div>

这是我正在使用的一些 HTML 的模型。我正在尝试使用 XPATH 来查找与 id: 1 关联的时间量,并且只有 id: 1,而不是 id: 2。

//span[@class = 'attr'][text()='id:']/following-sibling::span[1][text()='1']

为我正确获取了 id 的“1”元素,但我尝试这样做

 //span[@class = 'attr'][text()='id:']/following-sibling::span[1][text()='1']/following-sibling::span[1][text()='time:']/following-sibling::span[1]

为了在 id: 1 之后获取数字对我不起作用。我需要 xpath 仅识别某个 id 之后的时间,因此在时间元素之后使用单个跟随 id 对我不起作用,因为它还需要找到 id。甚至可以连续两次/三次跟随兄弟姐妹吗?有一个更好的方法吗?

【问题讨论】:

  • 当然,您可以多次使用following-sibling::。我已经测试了您的 XPath,并且两者都有效。 “对我不起作用”是什么意思?
  • 对不起,看起来确实是这样。在我的真实代码上只是混淆了我应该在最后一个跨度之后输入什么数字。无论如何谢谢:)

标签: xml xpath


【解决方案1】:

是的,您可以多次使用following-sibling:: 轴。

您的 XPath 按预期工作。鉴于您的 HTML 的布局,除了可能使用 spans 的字符串值而不是子节点 text() 之外,您无法通过缩短 XPath 来做很多事情:

 //span[@class='attr'][.='id:']/following-sibling::span[1][.='1']
                               /following-sibling::span[1][.='time:']
                               /following-sibling::span[1]

【讨论】:

  • 除了第二种更容易编写之外,使用 [text()='1'] 和 [.='1'] 有区别吗?谢谢
  • 是的,总的来说它们肯定是不同的,但在你的情况下这并不重要。要了解差异,请参阅XPath text() = is different than XPath . =
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-03
相关资源
最近更新 更多