pourquoi l'ancien code des sorties de TEXTE,
pourquoi devrais-je insister XSL pour ignorer toutes les
un autre texte? c'est que le comportement de
tous les parseurs XML ou seulement de mon propre
Vous êtes à la découverte de l'une des plus fondamentales fonctionnalités XSLT, comme spécifié dans le cahier des charges: les modèles intégrés de XSLT.
À partir de la spécification:
Il y a un modèle intégré de la règle de
permettre récursive de continuer le traitement
en l'absence d'un motif réussie
match par un modèle explicite de la règle de
la feuille de style. Ce modèle de la règle
s'applique à la fois les nœuds d'élément et de la
nœud racine. La figure suivante montre la
l'équivalent du modèle intégré
la règle:
<xsl:template match="*|/">
<xsl:apply-templates/>
</xsl:template>
Il y a aussi un modèle intégré de la règle
pour chaque mode, ce qui permet récursive
le traitement de continuer dans la même
mode en l'absence d'un succès
mise en correspondance du modèle par un modèle explicite
la règle dans la feuille de style. Ce modèle
la règle s'applique à la fois les nœuds d'élément et
le nœud racine. La figure suivante montre la
l'équivalent du modèle intégré
la règle pour le mode m.
<xsl:template match="*|/" mode="m">
<xsl:apply-templates mode="m"/>
</xsl:template>
Il y a aussi un modèle intégré de la règle
pour le texte et les nœuds d'attribut
des copies de texte par le biais de:
<xsl:template match="text()|@*">
<xsl:value-of select="."/>
</xsl:template>
Le modèle intégré de la règle de
les instructions de traitement et les commentaires
est de ne rien faire.
<xsl:template match="processing-instruction()|comment()"/>
Le modèle intégré de la règle de
espace de noms de nœuds est de ne rien faire.
Il n'y a pas de modèle qui peut correspondre à un
nœud d'espace de noms; ainsi, le
modèle la règle est le seul modèle
la règle qui est appliquée pour l'espace de noms
les nœuds.
Le modèle intégré les règles sont
traités comme s'ils étaient importés
implicitement avant de la feuille de style et
donc, avoir une baisse des importations de priorité que
toutes les autres règles de modèle. Ainsi, l'
l'auteur peut remplacer un haut-
modèle de règle en incluant explicitement
modèle la règle.
Ainsi, le comportement est le résultat de l'application de la intégré dans les modèles -- le 1er et le 2ème de tous les trois d'entre eux.
C'est une bonne XSLT modèle de conception pour remplacer les modèles intégrés avec votre propre à émettre un message d'erreur à chaque fois afin que le programmeur sait immédiatement sa transformation est une "fuite":
Par exemple, si il est présent document XML:
<a>
<b>
<c>Don't want to see this</c>
</b>
</a>
et il est traité avec cette transformation:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="a|b">
<xsl:copy>
<xsl:attribute name="name">
<xsl:value-of select="name()"/>
</xsl:attribute>
<xsl:apply-templates/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
le résultat est:
<a name="a">
<b name="b">Don't want to see this</b>
</a>
et le programmeur va être très confus comment le texte non désiré est apparu.
Cependant, juste en ajoutant cette catch-all template
permet d'éviter toute confusion et de repérer les erreurs immédiatement:
<xsl:template match="*">
<xsl:message terminate="no">
WARNING: Unmatched element: <xsl:value-of select="name()"/>
</xsl:message>
<xsl:apply-templates/>
</xsl:template>
Maintenant, en plus de la confusion de la sortie le programmeur obtient un avertissement qui explique le problème immédiatement:
WARNING: Unmatched element: c