XPath根据内容选择元素之间的元素?

时间:2016-04-11 07:06:01

标签: html xml xpath html-agility-pack

鉴于以下HTML,XPath将选择a锚文本与Mac / Macbooks锚文本之间的所有More元素?

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

2 个答案:

答案 0 :(得分:1)

根据内容选择,即“更多”..

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

//a[.="More"]

答案 1 :(得分:1)

根据内容选择两个元素之间的元素

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

    • //a[.='Mac / Macbooks']选择开始元素

    • //a[.='More']选择结束元素

  2. 使用preceding and following axis选择元素 其他元素之间。

  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>
    

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