web-dev-qa-db-fra.com

XPath pour sélectionner élément par valeur d'attribut

J'ai XML suivant.

<?xml version="1.0" encoding="UTF-8"?>
<Employees>
    <Employee id="3">
        <age>40</age>
        <name>Tom</name>
        <gender>Male</gender>
        <role>Manager</role>
    </Employee>
    <Employee id="4">
        <age>25</age>
        <name>Meghna</name>
        <gender>Female</gender>
        <role>Manager</role>
    </Employee>
</Employees>

Je veux sélectionner l'élément employé avec id = "4".

J'utilise ci-dessous l'expression XPath qui ne renvoie rien.

//Employee/[@id='4']/text()

Je l'ai vérifié à l'adresse http://chris.photobooks.com/xml/default.htm et il indique xpath non valide, sans savoir où se trouve le problème.

164
Pankaj

Vous devez supprimer le / avant le [. Les prédicats (les parties dans []) ne doivent pas être précédés de barres obliques. En outre, pour sélectionner l'élément Employee lui-même, vous devez laisser la /text() à la fin, sinon vous sélectionneriez simplement les valeurs de texte d'espacement immédiatement sous l'élément Employee.

//Employee[@id='4']

Édition: Comme Jens le souligne dans les commentaires, // peut être très lent car il recherche dans tout le document les nœuds correspondants. Si la structure des documents avec lesquels vous travaillez est cohérente, vous feriez probablement mieux d'utiliser un chemin complet, par exemple:

/Employees/Employee[@id='4']
240
JLRishe

Essayez de faire ceci:

/Employees/Employee[@id=4]/*/text()
10
Gilles Quenot

Ensuite, vous pouvez sélectionner "tous les nœuds avec un attribut particulier" comme ceci:

//*[@id='4']

1
rogerdpack