2010-10-12 4 views

Répondre

-1

Je n'ai pas de nokogiri, mais voici une alternative utilisant simplement la manipulation de chaînes de base.

html=<<EOF 
<body> 
<div>some text</div> 
I NEED THIS TEXT ONLY 
<div>some text</div> 
more text here 
<div>some text</div> 
one more text here 
<div>some text</div> 
</body> 
EOF 
p html.split(/<\/*body>/)[1].split(/<\/div>/)[1].split(/<div>/)[0] 
+0

** Vraiment? ** La manipulation de chaînes au lieu de l'analyse? –

+1

O.M.G., si c'était une question Perl, la foudre aurait frappé. Pour tout sauf la manipulation de chaîne de tâche la plus triviale et/ou son cousin REGEX échouera mal. Pour la recherche amusante de perl, regex et parsing html. –

+0

L'exigence d'OP est triviale. Pour moi, il n'y a aucune raison d'utiliser nokogiri ou un autre outil d'analyse syntaxique. – ghostdog74

0

cela renvoie le premier nœud de texte dans body entre deux éléments: div

/body/text()[ 
    ./preceding::element()[1][local-name()="div"] and 
    ./following::element()[1][local-name()="div"] 
][1] 

devrait retourner

I NEED THIS TEXT ONLY 
+0

Non, j'ai besoin d'un texte exacly entre deux divs. – amirka

+0

J'ai corrigé le poste en conséquence. Est-ce que ça marche maintenant? –

+0

Je vérifie les week-ends, par exemple – amirka

0

Ce XPath 1.0:

/body/text()[preceding-sibling::*[1][self::div]] 
      [following-sibling::*[1][self::div]][1] 

Aussi:

/body/text()[normalize-space()][1] 
5

Utilisation:

/*/div[1]/following-sibling::text()[1] 

Sélectionne le premier frère nœud texte du premier enfant div de l'élément supérieur du document.

Questions connexes