XSL xsl: template match="/"

Je ne fais qu'apprendre le XML et comment utiliser les fichiers XSL. Dans un fichier XSL j'ai trouvé le terme suivant:

xsl:template match="/"

ça veut dire quoi? Et que pourrais-je utiliser à la place du / ? Puis-je écrire table ou toute autre balise HTML au lieu de / ?

49
demandé sur Wayne Burkett 2010-06-27 14:46:52

3 réponses

la valeur de l'attribut match de l'instruction <xsl:template> doit être un match pattern .

les motifs de correspondance forment un sous-ensemble de L'ensemble des expressions XPath . La première limite, naturelle, est qu'un motif de correspondance doit sélectionner un ensemble de noeuds. Il y a aussi d'autres limitations. En particulier, les axes inversés ne sont pas autorisés dans les étapes de localisation (mais peuvent être spécifiés dans les prédicat.) De plus, aucune variable ou référence de paramètre n'est autorisée dans XSLT 1.0, mais leur utilisation est légale dans XSLT 2.x.

/ dans XPath indique la racine ou noeud de document. Dans XPath 2.0 (et donc XSLT 2.x) cela peut aussi être écrit comme document-node() .

un motif de correspondance peut contenir le // abréviation .

exemples de match motifs:

<xsl:template match="table">

peut être appliqué sur tout élément nommé table .

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

peut s'appliquer à tout é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="/*">

ne peut s'appliquer qu'à l'élément supérieur d'un document XML.

<xsl:template match="@*">

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

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

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

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

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

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

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

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

peut être appliqué à n'importe quel noeud: élément, Texte, commentaire ou traitement instructon.

112
répondu Dimitre Novatchev 2017-10-18 18:59:36

il est intéressant de noter, puisqu'il est déroutant pour les personnes novices en XML, que la racine (ou le noeud de document) d'un document XML n'est pas l'élément de premier niveau. Il est le parent de l'élément de niveau supérieur. C'est déroutant car il ne semble pas que l'élément supérieur puisse avoir un parent. N'est-il pas le top niveau?

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: un traitement instruction, un commentaire et un élément.

donc, par exemple, si vous vouliez écrire une transformation qui s'est débarrassée de ce commentaire, mais a laissé 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 utile), voici un modèle XPath qui correspond à l'élément de premier niveau du document quel que soit son nom: /* .

35
répondu Robert Rossney 2010-06-28 16:20:19

l'attribut match indique les parties sur lesquelles la transformation du modèle va être appliquée. Dans ce cas particulier, le "/" désigne 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 renvoyer des parties spécifiques du fichier xml cible.

pour obtenir 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 j'ai fournis pour vous au bas de la réponse.

Pourrais-je écrire "table" ou tout autre balise html au lieu de "/" ?

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

ici quelques liens:

7
répondu Koynov 2018-03-06 22:24:16