什么xpath查询可以解决这个问题

Gre*_*reg 0 ruby xpath mechanize html-parsing nokogiri

我可以用什么XPath查询来解决下面的问题.我实际上正在使用nokogiri(在红宝石中),所以理想情况下,答案将采用红宝石nokogiri形式,但除此之外我只能使用XPath.

要求的输出

我正在寻求解析下面的HTML(一个完整的html页面,但为了清晰起见,我只是复制/粘贴相关部分),最后基本上是以下内容:

Phone Number   Plan ID
545454545      12345
3434343434     67890
Run Code Online (Sandbox Code Playgroud)

所以在Ruby/nokogiri的上下文中,这可能是一个哈希,例如:

% result = { "545454545" => "12345",  "3434343434" => "67890" }
Run Code Online (Sandbox Code Playgroud)

要解析的HTML

.
.
.
<form method="post">
   <div style='line-height:18px;background-color:#FFFFFF;border: 1px #dedede solid;padding:10px;'>
   <table width='90%' border=0>
      <tr>
         <td width='30%'> Plan ID </td>
         <td width='70%'> 12345 </td>

      </tr>
      <tr>
         <td> Phone Number </td>
         <td> 545454545 </td>
      </tr>
      .
      .
      .
      </table>
   </div>
   <br>
   .
   .
   .
   <div style='line-height:18px;background-color:#FFFFFF;border: 1px #dedede solid;padding:10px;'>
   <table width='90%' border=0>
      <tr>
         <td width='30%'> Plan ID </td>
         <td width='70%'> 67890 </td>

      </tr>
      <tr>
         <td> Phone Number </td>
         <td> 3434343434 </td>
      </tr>
      .
      .
      .
      </table>
   </div>
   <br>
Run Code Online (Sandbox Code Playgroud)

pgu*_*rio 5

怎么样:

xpath = '//td[contains(text(),"Phone Number") or contains(text(),"Plan ID")]/following-sibling::td'
Hash[*doc.xpath(xpath).map{|x| x.text.strip}.reverse]
Run Code Online (Sandbox Code Playgroud)