2016-03-03 72 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"前面的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()

這將找到包含Statement Date航向<td>,緊接着就得到<td>。然後它得到<td>中第一個p的文本內容。