2014-05-18 106 views
0

我有以下網頁,我正試圖用xpath解析。使用Xpath解析HTML

對於第一個表xpath //*[@id="eForm"]/table[1]工作正常,對於第二個表xpath //*[@id="eForm"]/table[2]工作正常。

但是我想要做的不是在我的聲明中使用親屬,以防頁面順序發生變化。

對於第二個表,它遵循代理的跨度id。任何人都可以告訴我,如果我可以在xpath表中指定跨度ID後的表格嗎?

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<html lang="en"> 
<head> 
    <title>Blah</title> 
    <style type="text/css"> 

    </style> 


</head> 
<body class="frame"> 
    <div id="container"> 
     <div id="maincontent"> 
      <h1>Details</h1> 
      <br> 
      <form name="Form" method="post" action="xxx" id="eForm"> 
       <input type="hidden" name="__VIEWSTATE" value="xxx" /> 


       <table class="summary"> 
        <thead> 
         <tr> 
          <th colspan="2"> 
           SUmmary Heading 
          </th> 
         </tr> 
        </thead> 

        <tr> 
         <th width="40%"> 

         </th> 
         <td> 
          ABC Ltd 
         </td> 
        </tr> 
        <tr> 
         <th> 
          Number 
         </th> 
         <td> 
          1234 
         </td> 
        </tr> 
        <tr> 
         <th> 
          Company Type 
         </th> 
         <td> 
          Normal Type 
         </td> 
        </tr> 
        <tr> 
         <th> 
          Office 
         </th> 
         <td> 
          Street Address is Here 
         </td> 
        </tr> 
        <tr> 
         <th> 
          Date of Incorporation 
         </th> 
         <td> 
          24/02/2014 
         </td> 
        </tr> 




        <tr> 
         <th> 
          Status 
         </th> 
         <td> 
          LIVE 
         </td> 
        </tr> 

       </table> 
       <span id="Agent"> 
        <br> 
       </span> 
       <table class="summary"> 
        <thead> 
         <tr> 
          <th colspan="2"> 
           Agent Details 
          </th> 
         </tr> 
        </thead> 

        <tr> 
         <th width="40%"> 
          Registered Agent 
         </th> 
         <td>ABC COMPANY LIMITED</td> 
        </tr> 
        <tr> 
         <th> 
          Agent Address 
         </th> 
         <td>Street Address</td> 
        </tr> 

       </table> 


       <!----><br> 
       <br> 
      </form> 
     </div> 
    </div> 
</body> 
</html> 

回答

0

回答你的問題 - 是的。要做到這一點你可以在你這樣的XPath:

//form[@id='eForm']//span[@id='Agent']//table[@class='summary'] 

您也可以使用此XPath來確定1-ST表:

//form[@id='eForm']//table//thead//th[text()='SUmmary Heading'] 

而這個識別2-ND表:

//form[@id='eForm']//table//thead//th[text()='Agent Details'] 

在這種情況下,你不需要使用親戚。

+0

感謝您的回覆,但我不能得到這個在我的應用程序的工作 - 是否有任何工具來幫助檢查出針對專門的網頁語法? – John

+0

@John,你可以使用FireFox的Firebug + Firepath插件。 順便說一句,我已經編輯過初始答案,'// [@ id ='eForm']'必須是'// form [@ id ='eForm']'或'// * [@ id ='eForm' ]' –

+0

@亞歷山大,謝謝你糾正我的答案。 John as Alexander說你可以使用Firebug檢查你的xpthes。請讓我知道,如果你仍然有這個問題。 – Andrii

0

您可以使用XPath following-sibling指定另一個元素之後的元素。示例爲您的情況:

//form[@id='eForm']/span[@id='Agent']/following-sibling::table 

或者你可以嘗試另一種方式;選擇爲表前<span id="Agent">元素:

//form[@id='eForm']/table[preceding-sibling::span[@id='Agent']]