60 votes

XSL xsl: template match = "/"

Je viens d'apprendre le 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 / ? Pourrais-je écrire table ou toute autre balise HTML au lieu de / ?

130voto

Dimitre Novatchev Points 147842

La valeur de l' match attribut de l' <xsl:template> enseignement doit être l'un correspond au motif.

Correspondent à des motifs forment un sous-ensemble de l'ensemble de toutes les expressions XPath. La première, naturelle, la limitation est qu'un match de patron devez sélectionner un ensemble de nœuds. Il y a aussi d'autres limitations. En particulier, inverser les axes ne sont pas autorisés dans les étapes d'emplacement (mais peut être spécifié dans les prédicats). Aussi, aucune variable ou d'un paramètre de références sont autorisés dans XSLT 1.0, mais l'utilisation de ces est légal dans XSLT 2.x.

/ dans XPath désigne la racine ou nœud de document. Dans XPath 2.0 (et donc XSLT 2.x), cela peut aussi être écrite document-node().

Exemples de correspondance de motifs:

<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 d'un document XML.

<xsl:template match="@*">

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

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

peut être appliqué à tout nœud de texte.

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

peut être appliqué à tout nœud de commentaire.

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

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

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

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

44voto

Robert Rossney Points 43767

Il est intéressant de noter, car c'est source de confusion pour les personnes à XML, que la racine (ou nœud de document) d'un document XML n'est pas l'élément de niveau supérieur. Il est le parent de l'élément de niveau supérieur. Ceci est source de confusion, car il ne semble pas être l'élément de niveau supérieur peut avoir un parent. N'est-il pas le top niveau?

Mais regardez cela, 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 d'un élément.

Ainsi, par exemple, si vous souhaitez écrire une transformation qui s'est débarrassé de ce commentaire, mais laissé dans les commentaires apparaissant n'importe où ailleurs dans le document, vous devez ajouter ceci à l'identité de transformation:

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

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

11voto

Koynov Points 1032

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

Pour acquérir une bonne compréhension de ce que vous pouvez mettre en mathc attribut, vous devez comprendre ce que xpath est et comment l'utiliser. Je suggère yo regarder les liens que j'ai fourni pour youat le fond de la réponse.

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

Oui, vous pouvez. Mais cela dépend exactement ce que vous essayez de faire. si votre cible fichier xml contient HMTL éléments et vous êtes triyng pour appliquer ce xsl:template sur eux, il est logique d'utiliser la table, div ou anithing d'autre.

Voici quelques liens:

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X