134 votes

XPath - Sélection d'éléments d'une valeur égale

Dans Xpath, je suis désireux de sélectionner les éléments que l'égalité une valeur spécifique.

Exemple de données XML:

<aaa id="11" >
    <aaa id="21" >
        <aaa id="31" ></aaa>
        <bbb id="32" >
            <aaa id="41" ></aaa>
            <bbb id="42" ></bbb>
            <ccc id="43" ></ccc>
            <ddd id="44" >qwerty</ddd>
            <ddd id="45" ></ddd>
            <ddd id="46" ></ddd>
        </bbb>
    </aaa>
    <bbb id="22" >
         <aaa id="33" >qwerty</aaa>
         <bbb id="34" ></bbb>
         <ccc id="35" ></ccc>
         <ddd id="36" ></ddd>
         <ddd id="37" ></ddd>
         <ddd id="38" ></ddd>
    </bbb>
    <ccc id="23" >qwerty</ccc>
    <ccc id="24" ></ccc>
 </aaa>

Maintenant, à l'aide de XPath:

//ccc[.='qwerty']

Je reçois le bon, attend les résultats:

Name    Value
ccc     qwerty

Maintenant, à l'aide de XPath:

//aaa[.='qwerty']

Je reçois inattendu résultats:

Name    Value
aaa      
aaa     qwerty

Et ce que je suis particulièrement intéressé, est de savoir comment choisir tout élément avec la valeur

XPath:

//*[.='qwerty']

Je me sens très étrange, inattendu résultats:

Name    Value
aaa
bbb
ddd     qwerty
bbb     qwerty
aaa     qwerty
ccc     qwerty

Quelqu'un peut-il expliquer ces résultats, et comment les corriger mes expressions XPath pour obtenir plus de résultats attendus?

Merci!! :)

229voto

Dimitre Novatchev Points 147842

Le XPath spec. définit la chaîne de valeur d'un élément comme la concaténation (dans l'ordre du document) de l'ensemble de ses nœud texte descendants.

C'est ce qui explique les "drôles de résultats".

"Mieux", les résultats peuvent être obtenus en utilisant les expressions ci-dessous:

//*[text() = 'qwerty']

Le ci-dessus sélectionne chaque élément dans le document qui a au moins un nœud texte de l'enfant avec la valeur 'qwerty'.

//*[text() = 'qwerty' and not(text()[2])]

Le ci-dessus sélectionne chaque élément dans le document qui n'a qu'un seul nœud texte de l'enfant et de sa valeur est: 'qwerty'.

19voto

Gregoire Points 11270

Essayer

//*[text()='qwerty'] parce que . est votre élément actuel

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