Expressions booléennes, de comparaison et ensemblistes
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 |
---|---|
|
ET logique |
|
OU logique |
|
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, où 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 |
|
Comparaisons |
5 |
|
Comparaisons |
6 |
|
Union |
7 |
|
Opérateur booléen NOT |
8 |
|
Opérateur booléen AND |
9 |
|
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 précédés du caractère d'échappement, respectivement <
et >
. 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 <= 10]"/>
Lorsqu'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 >= 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.
Exemples
Expression | Référence |
---|---|
|
Tous les éléments |
|
Tous les éléments |
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.
Exemples
Expression | Référence |
---|---|
|
Tous les éléments |
author[not(degree or award) and publication] |
Tous les éléments |
Exemple
Fichier 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>
Fichier 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>
Sortie
La transformation appliquée au fichier XML ci-dessus donne le résultat suivant :
<x>
<y>y31</y>
<y>y32</y>
</x>