2016-03-03 4 views
-1

У меня есть следующий HTML Я работаю с: (кусок его здесь)Найти конкретную позицию элемента в XPath после проверки состояния

<table class="detailTable"> 
    <tbody> 
    <tr> 
     <td class="detailTitle" align="top"> 
     <h3>Credit Limit:</h3> 
     <h3>Current Balance:</h3> 
     <h3>Pending Balance:</h3> 
     <h3>Available Credit:</h3> 
     </td> 
     <td align="top"> 
     <p>$677.77</p> 
     <p>$7.77</p> 
     <p>$7.77</p> 
     <p>$677.77</p> 
     </td> 
     <td class="detailTitle"> 
     <h3>Last Statement Date:</h3> 
     <h4>Payment Address</h4> 
     </td> 
     <td> 
     <p> 05/19/2015 </p> 
     <p class="attribution"> 
     </td> 
    </tr> 
    </tbody> 
</table> 

мне нужно сначала проверить, существует ли «Statement Date», а затем найти свою позицию. Затем получите его значение, которое соответствует соответствующему тегу <p>. Мне нужно сделать это с помощью XPath. Какие-либо предложения?

До сих пор я пытался использовать //table[@class='detailTable'][1]//td[2]//p[position(td[contains(.,'Statement Date')])], но он не работает.

+2

Вы понимаете, что это не в html, который вы показали? –

+0

Извините, это была ошибка @PadraicCunningham .. исправить – DT7

+0

На каком языке вы используете? –

ответ

1

Это один из возможных способов: (отформатирован для удобства чтения)

//table[@class='detailTable'] 
//tr 
/td[*[contains(.,'Statement Date')]] 
/following-sibling::td[1] 
/*[position() 
     = 
    count(
     parent::td 
     /preceding-sibling::td[1] 
     /*[contains(.,'Statement Date')]/preceding-sibling::* 
    )+1 
    ] 

объяснение:

  • ..../td[*[contains(.,'Statement Date')]]: С самого начала до этой части, то XPath найти td элемент, где, по крайней мере, один из его детей содержит текст "Statement Date"
  • /following-sibling::td[1]: от сопоставлено td, перейдите к ближайшему следующему двойников td ...
  • /*[position() = count(parent::td/preceding-sibling::td[1]/*[contains(.,'Statement Date')]/preceding-sibling::*)+1]: ... и вернуть дочерний элемент в положении равно положения элемента, который содержит текст "Statement Date" в previous td. Обратите внимание, что мы используем count(preceding-sibling::*)+1, чтобы получить индекс позиции элемента, содержащего текст "Statement Date".
1

Вы можете сделать это следующим образом:

//table[@class='detailTable'][1]//td[@class="detailTitle" and contains(./h3, 'Statement Date')]/following-sibling::td[1]/p[1]/text()

Найдет <td>, содержащий Statement Date заголовок и получить <td> сразу после него. Затем он получает текстовое содержимое первого p в этом <td>.

Смежные вопросы