ruby
  • xpath
  • 2010-07-24 80 views 0 likes 
    0

    我在Ruby中使用Xpath并附带以下语句。如何匹配返回的XPath HTML中的某些文本?

    print XPath.first(Document.new(html),"//tr[@id='ctl00_c1_rr_ci_trAdd']//td[2]") 
    

    查询返回以下文本。

    <td> 
    
           1371 N Belsay Rd<br/>Burton, MI 48509 
           <br/> 
           <a href='http://www.mapquest.com/maps/map.adp?style=2&amp;address=1371+N+Belsay+Rd&amp;city=Burton&amp;state=MI&amp;zip=48509' class='rptLnk2' id='ctl00_c1_rr_ci_hlMapQuest' target='_blank'>See the location on a Mapquest Map</a> 
           <br/> 
           <a href='http://maps.google.com?q=1371+N+Belsay+Rd Burton, MI 48509' class='rptLnk2' id='ctl00_c1_rr_ci_hlGoogleMaps' target='_blank'>See the location on a Google Map</a> 
          </td> 
    

    但我只想本文

    1371 N Belsay Rd<br/>Burton, MI 48509 
    

    谁能告诉我如何实现这一目标?当我使用扫描语句时 - 我收到此错误。

    private method `scan' called for <td> ... </>:REXML::Element (NoMethodError) 
    

    回答

    0

    XPath表达式得到这个文本1371 N Belsay Rd - 作为一个文本节点是:

    ((//tr[@id='ctl00_c1_rr_ci_trAdd'])//td)[2]/text()[1] 
    

    如果你想表达选择三个节点:

    1371 N Belsay Rd<br/>Burton, MI 48509 
    

    你可以用这个:

    normalize-space(((//tr[@id='ctl00_c1_rr_ci_trAdd'])//td) 
               [2] 
               /node()[not(position() > 3)]) 
    
    +0

    它只返回'1371 N Belsay Rd'而不是'1371 N Belsay Rd
    Burton,MI 48509' – Shubham 2010-07-24 06:05:24

    +0

    @Shubham:对不起,我没有读好你的问题。我编辑了我的答案,现在你有了XPath表达式,可以精确选择你要求的节点。 – 2010-07-24 15:01:56

    相关问题