Pourquoi tout le monde regarde-t-il l'attribut "prop"? Ai-je oublié quelque chose? Il dit simplement obtenir les trois premiers nœuds.
6
Tout le monde regarde l'attribut prop parce que c'est ce qui a été demandé. Récupère tous les nœuds où prop contient "Foo". Ajoutez <a prop="Foo5" /> et vous verrez pourquoi ce n'est pas seulement "les trois premiers nœuds" ..
erlando
La question dans le corps est mal formulée, quel que soit le titre. Foo peut-il vraiment être dans n'importe quel attribut prop, ou voulez-vous sérieusement simplement les trois premiers nœuds?
3
Oui, veuillez vous référer au titre (et n'hésitez pas à le modifier).
Edit: Une autre chose à noter est que si XPath ci-dessus retournera la bonne réponse pour ce xml particulier, si vous voulez vous garantir que vous n'obtiendrez que les éléments "a" dans l'élément "bla", vous devriez, comme d'autres l'ont mentionné, également utiliser
/bla/a[contains(@prop,'Foo')]
Cela vous recherchera tous les éléments "a" dans tout votre document XML, qu'ils soient imbriqués dans un élément "bla"
//a[contains(@prop,'Foo')]
J'ai ajouté ceci par souci de rigueur et dans l'esprit du stackoverflow. :)
L'Axe - recherchez dans chaque nœud en dessous et le nœud lui-même. Il vaut souvent mieux dire ceci que //. J'ai rencontré des implémentations où // signifie n'importe où (décendant ou self du nœud racine). L'autre utilise l'axe par défaut.
* or /bla/a
La balise - une correspondance générique, et / bla / a est un chemin absolu.
[contains(@prop,'Foo')] or [position() <= 3]
La condition entre []. @prop est un raccourci pour attribut :: prop, car attribut est un autre axe de recherche. Vous pouvez également sélectionner les 3 premiers en utilisant la fonction position ().
Réponses:
Fonctionne si j'utilise ce XML pour obtenir des résultats.
Edit: Une autre chose à noter est que si XPath ci-dessus retournera la bonne réponse pour ce xml particulier, si vous voulez vous garantir que vous n'obtiendrez que les éléments "a" dans l'élément "bla", vous devriez, comme d'autres l'ont mentionné, également utiliser
Cela vous recherchera tous les éléments "a" dans tout votre document XML, qu'ils soient imbriqués dans un élément "bla"
J'ai ajouté ceci par souci de rigueur et dans l'esprit du stackoverflow. :)
la source
xmlme.com
redirige maintenant vers un autre hôte et ne semble pas héberger l'outil ou quelque chose de similaire.Ce XPath vous donnera tous les nœuds qui ont des attributs contenant 'Foo' quel que soit le nom du nœud ou le nom de l'attribut:
Bien sûr, si vous êtes plus intéressé par le contenu de l'attribut lui-même, et pas nécessairement par son nœud parent, supprimez simplement le / ..
la source
//@*[contains(., 'Foo')]
Ou:
Ou:
Disséqué:
L'Axe - recherchez dans chaque nœud en dessous et le nœud lui-même. Il vaut souvent mieux dire ceci que //. J'ai rencontré des implémentations où // signifie n'importe où (décendant ou self du nœud racine). L'autre utilise l'axe par défaut.
La balise - une correspondance générique, et / bla / a est un chemin absolu.
La condition entre []. @prop est un raccourci pour attribut :: prop, car attribut est un autre axe de recherche. Vous pouvez également sélectionner les 3 premiers en utilisant la fonction position ().
la source
John C est le plus proche, mais XPath est sensible à la casse, donc le XPath correct serait:
la source
Avez-vous essayé quelque chose comme:
// a [contient (@prop, "Foo")]
Je n'ai jamais utilisé la fonction contient auparavant, mais je soupçonne qu'elle devrait fonctionner comme annoncé ...
la source
Si vous devez également faire correspondre le contenu du lien lui-même, utilisez text ():
//a[contains(@href,"/some_link")][text()="Click here"]
la source
/ bla / a [contient (@prop, "toto")]
la source
Pour le code ci-dessus ... // * [contains (@ prop, 'foo')]
la source
essaye ça:
// a [contient (@ prop, 'foo')]
qui devrait fonctionner pour toutes les balises "a" du document
la source