2010-07-22 5 views
1

J'encoutered un problème qui ne pourrait obtenir un élément HTML en text.My HTML élément ressemble à:Comment obtenir un élément HTML par texte en utilisant XPath?

... 
<table> 
    ... 
    <tr> 
    ... 
    <td class="oMain">test value</td> 
    ... 
    <tr> 
    ... 
</table> 
... 

Pour des raisons particulières, je dois obtenir le «< td class = « Omain » > 'élément en utilisant son texte' valeur de test '. J'ai essayé '// tr [td =' test value ']/td' mais pas de résultat. Comment puis-je écrire l'expression XPath?

Toute aide est la bienvenue.Merci!

+0

J'utilise htmlcleaner pour analyser java, et j'ai seulement besoin d'une expression xpath plutôt que d'une programmation. BTW, est la conformité des spécifications Xpath '//td.oMain'? – newton

+0

Je ne pense pas. – FK82

+0

le n'a pas de fermeture –

Répondre

0

Qu'est-ce que vous utilisez pour faire l'analyse? Dans Ruby + hpricot, vous pouvez faire

doc.search("//td.oMain").each do |cell| 
    if cell.inner_html == "test value" 
    return cell 
    end 
end 

Dans ce cas, la cellule serait:

<td class="oMain">test value</td> 
-1

Au lieu de XPath d'écriture, vous pouvez alow utiliser jQuery pour obtenir la valeur comme suit

 
$(".oMain").html(); 

si vous avez plusieurs td dans ce cas, vous pouvez utiliser

 
$(".txt").each(function() { 
//Your JS code here to fetch the value using this.html() 

}); 
1

Votre expression

//tr[td='test value']/td 

place le prédicat sur le nœud parent "tr". Peut-être que c'est ce qui cause le problème.

Ce que vous voulez est probablement ce

//td[@class = "oMain" and child::text() = 'test value']] 

Voici un lien vers th spécification W3 de la langue XPath pour en savoir plus: http://www.w3.org/TR/xpath/

1

Votre expression XPath semble être correct. Avez-vous un espace de noms par défaut (par exemple XHTML) dans votre code HTML? Si oui, vous pouvez modifier votre XPath comme ceci:

//*[local-name()='td' and text()='test value'] 

Si vous pouvez comprendre comment utiliser les espaces de noms, vous pouvez aussi faire

//xhtml:tr[xhtml:td='test value']/xhtml:td 

Est-ce que l'aide?

0

Dans l'expression XPath, d'abord mettre le nœud d'élément, ce qui dans votre cas est td, puis appliquer le texte du filtre() 'noeud texte' =

// td [text() = 'valeur de test ']

Espérons que cela aide.

Questions connexes