2010-08-12 4 views
0

Je fais un peu de grattage d'une page et je vais bien avec la plupart des champs, mais ayant quelques problèmes avec l'adresse.LXml Xpath traitement de champ multi-ligne

<address> 
    56 South Ave 
    <br> 
    Miami, FL 33131 
    <br> 
</address> 

adresse = myWebPage.xpath ("// div [contient (@ classe, 'rightcol')] // adresse")

je peux obtenir la première ligne, 56 South Avenue, en utilisant la code ci-dessus. Mais je ne peux pas obtenir la ville, l'état, le zip. Comment est-ce que je changerais le code pour obtenir l'adresse complète?

Répondre

2
//div[contains(@class,'rightcol')]//address/text()[1] 

sélectionne le premier enfant noeud texte de address:

" 
    56 South Ave 
    " 

//div[contains(@class,'rightcol')]//address/text()[2] 

sélectionne le deuxième enfant noeud texte de address:

"  
    Miami, FL 33131  
    " 

//div[contains(@class,'rightcol')]//address/text() 

sélectionne les enfants nœuds texte de address.

+0

Merci beaucoup Dmitre. Ça marche. Une autre question pour vous: Bien que j'obtienne des résultats corrects lorsque je sélectionne node1 ou node2, je me rends compte que mes résultats sont terminés tôt si je // adresse/text(). Je n'ai que 3 résultats alors qu'il y a 10 enfants d'adresse. Cela peut être dû à des caractères non alphanumériques supplémentaires dans l'adresse. Je ne suis pas sûr. Je ferais normalement une analyse syntaxique mais je ne sais pas si je peux le faire dans les fonctions xpath. Comment gérez-vous généralement les données multilignes pour vous assurer que les résultats sont bien formés? – DevX

+0

@DevX: '// address/text()' sélectionne tous les nœuds de texte qui sont * fils * immédiats d'un élément 'address'. Si vous avez besoin de tous les descendants de n'importe quel noeud 'address', utilisez:' // address // text() '. –

Questions connexes