53 votes

Comment sélectionner deux attributs du même nœud avec une seule expression dans XPath ?

Par exemple :

//person[@id='abc123']/@haircolor|/@weight"

PS. il y a beaucoup d'enregistrements de "personnes".

75voto

Kobi Points 65357

Essayez ceci :

//person[@id='abc123']/@*[name()='weight' or name()='haircolor']

Si vous utilisez un processeur XPath 2.0, vous pouvez également utiliser une option plus esthétique :

//person[@id='abc123']/(@haircolor|@weight)`

28voto

planetjones Points 6479

Vous souhaitez rechercher des nœuds de personnes sur la base de la valeur de plusieurs attributs. Si c'est le cas, vous pouvez utiliser des ands, par exemple

//person[@id='abc123' and @haircolor='blue' and @weight='...']

Si vous souhaitez effectuer une recherche sur un seul attribut, mais renvoyer les valeurs des autres attributs, je ferais quelque chose comme ceci :

 <xsl:template match="person[@id='abc123']">
     <xsl:value-of select="@haircolor"/>
     <xsl:value-of select="@weight"/>
  </xsl:template>

2voto

Osiris76 Points 1184

Si vous essayez d'obtenir les valeurs des attributs spécifiés, je suggérerais d'introduire une variable pour la personne demandée.

<xsl:variable name="person" select="//person[@id = 'abc123']" />

Ensuite, vous pouvez obtenir n'importe quel attribut de la personne demandée en utilisant la variable spécifiée.

<xsl:value-of select="$person/@haircolor" />
<xsl:value-of select="$person/@weight" />

0voto

Manjesh Points 1

Exemple de XML :

<X>
<Y ATTRIB1=attrib1_value ATTRIB2=attrib2_value/>
</X>

string xPath="/" + X + "/" + Y +
"[@" + ATTRIB1 + "='" + attrib1_value + "']" +
"[@" + ATTRIB2 + "='" + attrib2_value + "']"

Banc d'essai XPath : http://www.whitebeam.org/library/guide/TechNotes/xpathtestbed.rhtm

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