0 votes

Comment faire correspondre un certain texte dans le code HTML XPath retourné ?

J'utilise Xpath en Ruby avec l'instruction suivante.

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

La requête renvoie le texte suivant.

<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>

Mais je veux juste ce texte

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

Quelqu'un peut-il me dire comment y parvenir ? Lorsque j'utilise l'instruction scan, j'obtiens cette erreur.

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

0voto

Dimitre Novatchev Points 147842

Une expression XPath pour obtenir ce texte 1371 N Belsay Rd -- en tant que nœud de texte, est :

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

Si vous souhaitez que l'expression sélectionne les trois nœuds :

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

vous pouvez utiliser celui-ci :

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X