可以在XPath中多次使用follow-sibling轴吗?

时间:2017-03-22 21:24:24

标签: xml xpath

<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']

正确地获得了&#39; 1&#39;我的身份的元素,但我尝试做

 //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之后的时间,所以在time元素之后使用单个跟随id对我来说不起作用,因为它还需要找到id。甚至可以连续两次/三次做兄弟姐妹吗?有一个更好的方法吗?

1 个答案:

答案 0 :(得分: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]