web-dev-qa-db-fra.com

XSL xsl: template match = "/"

J'apprends juste XML et comment utiliser les fichiers XSL. Dans un fichier XSL, j'ai trouvé le terme suivant:

xsl:template match="/"

Qu'est-ce que cela signifie? Et que pourrais-je utiliser à la place du /? Puis-je écrire table ou toute autre balise HTML au lieu de /?

53
Pat

La valeur de l'attribut match de l'instruction <xsl:template> Doit être un motif de correspondance.

Les modèles de correspondance forment un sous-ensemble de l'ensemble de toutes les expressions XPath possibles . La première limitation, naturelle, est qu'un modèle de correspondance doit sélectionner un ensemble de nœuds. Il existe également d'autres limitations. En particulier, les axes inverses ne sont pas autorisés dans les étapes de localisation (mais peuvent être spécifiés dans les prédicats). De plus, aucune référence de variable ou de paramètre n'est autorisée dans XSLT 1.0, mais leur utilisation est légale dans XSLT 2.x.

/ Dans XPath désigne le root ou nœud de document. Dans XPath 2.0 (et donc XSLT 2.x), cela peut également être écrit comme document-node().

Un modèle de correspondance peut contenir l'abréviation // .

Exemples de modèles de correspondance:

<xsl:template match="table">

peut être appliqué sur n'importe quel élément nommé table.

<xsl:template match="x/y">

peut être appliqué sur n'importe quel élément nommé y dont le parent est un élément nommé x.

<xsl:template match="*">

peut être appliqué à n'importe quel élément.

<xsl:template match="/*">

peut être appliqué uniquement à l'élément supérieur d'un document XML.

<xsl:template match="@*">

peut être appliqué à n'importe quel attribut.

<xsl:template match="text()">

peut être appliqué à n'importe quel nœud de texte.

<xsl:template match="comment()">

peut être appliqué à n'importe quel nœud de commentaire.

<xsl:template match="processing-instruction()">

peut être appliqué à n'importe quel nœud d'instruction de traitement.

<xsl:template match="node()">

peut être appliqué à n'importe quel nœud: élément, texte, commentaire ou instruction de traitement.

120
Dimitre Novatchev

Il convient de noter, car c'est déroutant pour les nouveaux utilisateurs de XML, que la racine (ou le nœud de document) d'un document XML n'est pas l'élément de niveau supérieur. C'est le parent de l'élément de niveau supérieur. C'est déroutant car il ne semble pas que l'élément de niveau supérieur puisse avoir un parent. N'est-ce pas le niveau supérieur?

Mais regardez ceci, un document XML bien formé:

<?xml-stylesheet href="my_transform.xsl" type="text/xsl"?>
<!-- Comments and processing instructions are XML nodes too, remember. -->
<TopLevelElement/>

La racine de ce document a trois enfants: une instruction de traitement, un commentaire et un élément.

Ainsi, par exemple, si vous vouliez écrire une transformation qui s'est débarrassée de ce commentaire, mais laissée dans tous les commentaires apparaissant ailleurs dans le document, vous ajouteriez ceci à la transformation d'identité:

<xsl:template match="/comment()"/>

Encore plus simple (et plus communément utile), voici un modèle XPath qui correspond à l'élément de niveau supérieur du document quel que soit son nom: /*.

40
Robert Rossney

L'attribut match indique sur quelles parties la transformation de modèle va être appliquée. Dans ce cas particulier, le "/" signifie la racine du document xml. La valeur que vous devez fournir dans l'attribut match doit être l'expression XPath. XPath est le langage que vous devez utiliser pour référencer des parties spécifiques du fichier xml cible.

Pour acquérir une compréhension significative de ce que vous pouvez mettre d'autre dans l'attribut match, vous devez comprendre ce qu'est xpath et comment l'utiliser. Je vous suggère de regarder les liens que je vous ai fournis au bas de la réponse.

Puis-je écrire "table" ou toute autre balise html au lieu de "/"?

Oui, vous pouvez. Mais cela dépend de ce que vous essayez de faire exactement. si votre fichier xml cible contient des éléments HMTL et que vous essayez d'appliquer ce modèle xsl: sur eux, il est judicieux d'utiliser table, div ou autre.

Voici quelques liens:

8
Koynov