如何根据XPath中嵌套兄弟的值选择元素?

时间:2010-11-01 01:12:24

标签: xpath

在包含大量DIV的文档中,我想选择asset-body元素中的文本,但仅限于该条目bookmark内的asset-name entry-title链接包含democrat值中的文字href

因此,在下面的示例中,包含两个“条目”(entry-1entry-2),我只想要显示 Jackpot! 的文字,因为该“条目”中bookmark链接的值包含子字符串democrat

http://blahblah.com/politics-democrat

是否可以使用XPath执行此操作?

输入1:(失败bookmark该条目中的链接缺少子字符串democrat

<div id="entry-1" class="item-asset asset hentry">
  <div class="asset-header">
    <h2 class="asset-name entry-title">
      <a rel="bookmark" href="http://blahblah.com/paper-scissors">Paper Scissors</a>
    </h2>
  </div>
  <div class="asset-content entry-content">
    <div class="asset-body">
     <p>Paper and scissors</p>
    </div>
  </div>
</div>

ENTRY 2:该条目中的 PASS bookmark链接包含子字符串democrat

<div id="entry-2" class="item-asset asset hentry">
  <div class="asset-header">
    <h2 class="asset-name entry-title">
      <a rel="bookmark" href="http://blahblah.com/politics-democrat">Pelosi Q&amp;A</a>
    </h2>
  </div>
  <div class="asset-content entry-content">
    <div class="asset-body">
     <p>Jackpot!</p>
    </div>
  </div>
</div>

3 个答案:

答案 0 :(得分:3)

//div[contains(
            div/h2[
              contains(concat(' ',@class,' '),' asset-name ')
              and
              contains(concat(' ',@class,' '),' entry-title ')
            ]/a[@rel='bookmark']/@href
         ,'democrat')
        ]/div/div[
           contains(concat(' ',@class,' '),' asset-body ')
           ]//text()

答案 1 :(得分:2)

使用

//div[@class='item-asset asset hentry' 
    and .//a[contains(@href, 'democrat')]
     ]
     /following-sibling::div[@class='asset-body']/p/text()

答案 2 :(得分:1)

  

在包含大文件的文件中   DIV的数量,我想选择   asset-body元素内的文字,   但只有内部有bookmark链接   那个asset-name entry-title   “条目”包含文本democrat   href值。

//*[contains(concat(' ',@class,' '),
                    ' hentry ')]
   [.//*[contains(concat(' ',@class,' '),
                         ' asset-name ')]
        [contains(concat(' ',@class,' '),
                         ' entry-title ')]
        //a[@rel='bookmark']
           [contains(@href,'democrat')]]
   //*[contains(concat(' ',@class,' '),
                       ' asset-body ')]