ruby
  • xpath
  • 2010-07-24 54 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

    相關問題