Как выбрать элемент на основе значения вложенного брата в XPath? - PullRequest
4 голосов
/ 01 ноября 2010

В документе, содержащем большое количество DIV, я хочу выделить текст внутри элементов asset-body, но только если ссылка bookmark внутри asset-name entry-title этой «записи» содержит текст democratв значении href.

Итак, в приведенном ниже примере, содержащем две «записи» (entry-1 и entry-2), я хочу только текст, который говорит Jackpot! потому что значение ссылки bookmark в этой «записи» содержит подстроку democrat:

http://blahblah.com/politics-democrat

Возможно ли это сделать с помощью XPath?

ENTRY 1: ( FAIL : 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 ]

3 голосов
/ 01 ноября 2010
//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()
2 голосов
/ 01 ноября 2010

Использование :

//div[@class='item-asset asset hentry' 
    and .//a[contains(@href, 'democrat')]
     ]
     /following-sibling::div[@class='asset-body']/p/text()
1 голос
/ 01 ноября 2010

В документе, содержащем большой количество 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 ')]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...