Partager via


Comparaisons (XPath)

Pour comparer deux objets dans XPath, utilisez le signe = pour tester l'égalité ou != pour l'inégalité.

Pour une opération de comparaison, vous devez fournir exactement deux opérandes. Vous pouvez ensuite effectuer les comparaisons en évaluant chaque opérande et en les convertissant au besoin pour qu'ils soient du même type. Pour ce faire, respectez la procédure décrite ci-dessous dans la section « Ordre de priorité pour les comparaisons ».

Tous les éléments et les attributs sont des chaînes, mais sont automatiquement paramétrés comme des valeurs entières pour les comparaisons numériques. Les valeurs numériques littérales sont paramétrées sur des types longs ou doubles pendant les opérations de comparaison comme indiqué dans le tableau suivant.

Pour plus d'informations sur < et d'autres opérateurs de comparaison binaires, consultez la section « Opérateurs de comparaison binaires » ci-dessous.

Type littéral

Comparaison

Exemple

Chaîne

text(lvalue) op text(rvalue)

a < GGG

Integer

(long) lvalue op (long) rvalue

a < 3

Real

(double) lvalue op (double) rvalue

a < 3.1

Des guillemets simples ou doubles peuvent servir de délimiteurs de chaîne dans les expressions. Ils simplifient la création et le transfert de modèles depuis les langages de script.

Pour plus d'informations sur l'exécution de comparaisons à l'aide de XPath, voir la section 3.4 sur les fonctions booléennes du document concernant le langage XML Path (XPath), version 1.0 (recommandation du W3C du 16 novembre 1999) à l'adresse www.w3.org/TR/xpath.

Exemples

Expression

Référence

author[last-name = "Bob"]

Tous les éléments <author> qui contiennent au moins un élément <last-name> avec la valeur Bob.

author[last-name[1] = "Bob"]

Tous les éléments <author> dont le premier élément enfant <last-name> présente la valeur Bob.

author/degree[@from != "Harvard"]

Tous les éléments <author> qui contiennent les éléments <degree> dont l'attribut from n'est pas égal à "Harvard".

author[last-name = /editor/last-name]

Tous les éléments <author> qui contiennent un élément <last-name> identique à l'élément <last-name> dans l'élément <editor> sous l'élément racine.

author[. = "Matthew Bob"]

Tous les éléments <author> dont la valeur de chaîne est Matthew Bob.

Ordre de priorité pour les comparaisons

Les comparaisons concernant les types de données respectent l'ordre des priorités.

  • Si au moins un opérande est booléen, chaque opérande est d'abord converti en booléen.

  • Sinon, si au moins un opérande est un nombre, chaque opérande est d'abord converti en nombre.

  • Sinon, si au moins un opérande est une date, chaque opérande est d'abord converti en date.

  • Sinon, les deux opérandes sont d'abord convertis en chaînes.

Opérateurs de comparaison binaires

Une série d'opérateurs de comparaison binaires compare des nombres et retourne des résultats booléens. Les opérateurs &lt;, &lt;=, &gt; et &gt;= correspondent respectivement à inférieur à, inférieur ou égal à, supérieur à et supérieur ou égal à. Des guillemets simples ou doubles peuvent servir de délimiteurs de chaîne dans les expressions. Ils simplifient la création et le transfert de modèles dans les langages de script.

Notez que ces opérateurs de comparaison fonctionnent uniquement avec les nombres. Vous pouvez comparer des chaînes pour en vérifier l'égalité, mais si vous voulez les comparer pour identifier celle qui arrive en premier dans l'ordre de tri, vous devez utiliser les Fonctions d'extension XPath de Microsoft.

ms256135.collapse_all(fr-fr,VS.120).gifExemples

Expression

Référence

author[last-name = "Bob" and price &gt; 50]

Tous les éléments <author> qui contiennent un élément <last-name> avec la valeur Bob et un élément <price> avec une valeur supérieure à 50.

degree[@from != "Harvard"]

Tous les éléments <degree> avec un attribut from qui n'est pas égal à "Harvard".

book[position() &lt;= 3]

Les trois premiers éléments (1, 2, 3) <book> du fichier XML.

ms256135.collapse_all(fr-fr,VS.120).gifExemple

ms256135.collapse_all(fr-fr,VS.120).gifFichier XML (test.xml)

<?xml version="1.0"?>
<test>

    <x a="1">
      <x a="2" b="B">
        <x>
          <y>y31</y>
          <y>y32</y>
        </x>
      </x>
    </x>

    <x a="2">
      <y>y2</y>
    </x>

    <x a="3">
      <y>y3</y>
    </x>

</test>

ms256135.collapse_all(fr-fr,VS.120).gifFichier XSLT (test.xsl)

La feuille de style XSLT suivante sélectionne tous les éléments <x> qui sont les premiers de la série dans l'ordre du document.

<?xml version='1.0'?>
<xsl:stylesheet version="1.0"
      xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:output method="xml" omit-xml-declaration="yes" indent="yes"/>

<!-- Suppress text nodes not covered in subsequent template rule. -->
<xsl:template match="text()"/>

<xsl:template match="*">
   <xsl:element name="{name()}">
      <xsl:apply-templates select="*|@*"/>
      <xsl:if test="text()">
         <xsl:value-of select="."/>
      </xsl:if>
   </xsl:element>
</xsl:template>

<xsl:template match="@*">
   <xsl:attribute name="{name()}">
      <xsl:value-of select="."/>
   </xsl:attribute>
</xsl:template>

<xsl:template match="/test">
  <xsl:apply-templates select="//x[position() = 1 ] "/>
</xsl:template>

</xsl:stylesheet>

ms256135.collapse_all(fr-fr,VS.120).gifDonnées en sortie formatées

La transformation appliquée au fichier XML ci-dessus donne le résultat suivant :

<x a="1">
  <x a="2" b="B">
     <x>
        <y>y31</y>
        <y>y32</y>
     </x>
   </x>
</x>
<x a="2" b="B">
   <x>
      <y>y31</y>
      <y>y32</y>
   </x>
</x>
<x>
   <y>y31</y>
   <y>y32</y>
</x>

Voir aussi

Référence

Exemples de XPath

Concepts

Exemple de fichier XML pour la syntaxe XPath (inventory.xml)