基于内容的元素之间 select 元素的 XPath?

XPath to select elements between elements based on content?

给定以下 HTML,什么 XPath 将 select 具有 Mac / Macbooks 锚文本的元素和具有 More 锚文本的元素之间的所有 a 元素文本?

<dd> 
  <ol> 
    <li> 
      <a href="http://www.shophive.com/apple?cat=9">DO NOT WANT 1</a> (164)
    </li>  
    <li> 
      <a href="http://www.shophive.com/apple?cat=10">Mac / Macbooks</a> (165)
    </li>  
    <li> 
      <a href="http://www.shophive.com/apple?cat=18">iPhone</a> (459)
    </li>  
    <li> 
      <a href="http://www.shophive.com/apple?cat=20">iPad</a> (221)
    </li>  
    <li> 
      <a href="http://www.shophive.com/apple?cat=486">Watch</a> (129)
    </li>  
    <li> 
      <a href="http://www.shophive.com/apple?cat=16">iPod</a> (85)
    </li>  
    <li> 
      <a href="http://www.shophive.com/apple?cat=574">More</a> (69)
    </li> 
    <li> 
      <a href="http://www.shophive.com/apple?cat=575">DO NOT WANT 2</a> (70)
    </li>  
  </ol> 
</dd>

Select根据内容,即"More"..

这可能有用吗?未经测试。

//a[.="More"]

根据内容select两个元素之间的元素

  1. 使用针对字符串值的测试来识别终点。

    • //a[.='Mac / Macbooks'] select 是 起始元素

    • //a[.='More'] select 是 结束元素

  2. 使用preceding and following axis到select元素 在其他元素之间。

  3. 决定是否应包括或排除端点。

    排除的个案:

    //a[preceding::a[.='Mac / Macbooks'] and following::a[.='More']]
    

    包含案例(与排除案例一样,但通过 or 添加了端点):

    //a[preceding::a[.='Mac / Macbooks'] and following::a[.='More'] 
                     or .='Mac / Macbooks'
                     or .='More']
    

    请注意,XPath 没有 following-or-selfpreceding-or-self 轴,因此我们明确添加端点。

    排除案例的结果是:

    <a href="http://www.shophive.com/apple?cat=18">iPhone</a>
    <a href="http://www.shophive.com/apple?cat=20">iPad</a>
    <a href="http://www.shophive.com/apple?cat=486">Watch</a>
    <a href="http://www.shophive.com/apple?cat=16">iPod</a>
    

    包含案例的结果是:

    <a href="http://www.shophive.com/apple?cat=10">Mac / Macbooks</a>
    <a href="http://www.shophive.com/apple?cat=18">iPhone</a>
    <a href="http://www.shophive.com/apple?cat=20">iPad</a>
    <a href="http://www.shophive.com/apple?cat=486">Watch</a>
    <a href="http://www.shophive.com/apple?cat=16">iPod</a>
    <a href="http://www.shophive.com/apple?cat=574">More</a>
    

    请注意,在这两种情况下,返回的结果均按文档顺序排列。