Как сопоставить определенный текст в возвращенном XPath HTML? - PullRequest
0 голосов
/ 24 июля 2010

Я использую Xpath в Ruby со следующим оператором.

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)

1 Ответ

0 голосов
/ 24 июля 2010

Выражение 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)])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...