Partager via


Expressions booléennes, de comparaison et ensemblistes (XPath)

Les modèles de filtre peuvent contenir des expressions booléennes, des expressions de comparaison et des expressions ensemblistes. Les raccourcis indiqués dans le tableau suivant représentent des symboles alternatifs fournis dans cette implémentation de XSL Transformations (XSLT). Ces opérateurs d'expression sont présentés dans cette documentation.

Opérateur

Description

and

ET logique

or

OU logique

not()

Négation

=

Égalité

!=

Différence

< *

Inférieur à

<= *

Inférieur ou égal à

> *

Supérieur à

<= *

Supérieur ou égal à

|

Opération ensembliste : retourne l'union de deux collections de nœuds

* Méthode XPath étendue

La syntaxe World Wide Web Consortium (W3C) pour les mots clés des opérateurs utilise l'espace blanc et d'autres séparateurs plutôt que le signe dollar ($) utilisé dans la version 2.5. Dans la syntaxe W3C, un mot clé binaire sous la forme $xxx$ peut être exprimé comme wsxxxws,ws réfère à un terminateur de jeton qui peut être un espace, un guillemet simple (') ou des guillemets doubles ("). Les opérateurs unaires tels que not() utilisent la notation fonctionnelle. Bien que l'implémentation de Microsoft prenne en charge les deux syntaxes, il est recommandé d'utiliser la syntaxe W3C pour assurer la compatibilité future.

Le tableau suivant indique l'ordre des priorités (de la plus haute à la plus faible) pour les opérateurs de comparaison et les opérateurs booléens.

Priorité

Opérateurs

Description

1

( )

Regroupement

2

[ ]

Filtres

3

/

//

Opérations de chemin

4

< ou &lt;

<= ou &lt;=

> ou &gt;

>= ou &gt;=

Comparaisons

5

=

!=

Comparaisons

6

|

Union

7

not()

Opérateur booléen NOT

8

And

Opérateur booléen AND

9

Or

Opérateur booléen OR

Lorsque les opérateurs sont utilisés dans un document XML, comme une feuille de style XSLT, les jetons < et > doivent être placés dans une séquence d'échappement, respectivement &lt; et &gt;. Par exemple, l'instruction XSLT suivante appelle une règle de modèle XSLT pour tous les éléments <book> dont l'élément <price> a une valeur numérique inférieure ou égale à 10.

<xsl:apply-templates select="book[price &lt;= 10]"/>

Quand une expression XPath est utilisée avec DOM, les opérateurs < et > ne doivent pas être précédés d'un caractère d'échappement. Par exemple, l'instruction JScript suivante sélectionne tous les éléments <book> dont l'élément <price> a une valeur numérique inférieure ou égale à 10.

var cheap_books = dom.selectNodes("book[price <= 10]");

Des expressions booléennes peuvent correspondre à tous les nœuds ayant une valeur particulière ou à tous les nœuds situés dans des plages particulières. Voici un exemple d'expression booléenne qui retourne la valeur false.

1 &gt;= 2

Les opérateurs respectent la casse.

ET et OU logiques

Les opérateurs booléens and et or effectuent des opérations ET logique et OU logique, respectivement. Alliés aux parenthèses de regroupement, ces opérateurs permettent de construire des expressions logiques sophistiquées.

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

Expression

Référence

author[degree and award]

Tous les éléments <author> qui contiennent au moins un élément <degree> et au moins un élément <award>.

author[(degree or award) and publication]

Tous les éléments <author> qui contiennent au moins un élément <degree> ou <award> et au moins un élément <publication>.

Opérateur booléen NOT

L'opérateur booléen not exprime la négation de la valeur d'une expression dans un modèle de filtre.

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

Expression

Référence

author[degree and not(publication)]

Tous les éléments <author> qui contiennent au moins un élément <degree> mais pas d'éléments <publication>.

author[not(degree or award) and publication]

Tous les éléments <author> qui contiennent au moins un élément <publication> mais ne contiennent aucun élément <degree> ou <award>.

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

ms256081.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>

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

La feuille de style XSLT suivante sélectionne tous les éléments <x> sans aucun attribut.

<?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[not(@*)] "/>
</xsl:template>

</xsl:stylesheet>

ms256081.collapse_all(fr-fr,VS.120).gifSortie

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

<x>
   <y>y31</y>
   <y>y32</y>
</x>