2016-10-14 4 views
0

J'ai une question concernant <xsl:apply-templates>.XSLT: <apply-templates select = "...">

laisse supposer que j'ai un XML comme celui-ci (voir http://www.tei-c.org/release/doc/tei-p5-doc/en/html/ref-subst.html):

<transcription> 
<subst>  
    <del>wrong</del> 
    <add>right</add> 
</subst>  
</transcription> 

Maintenant, je veux traiter cet enregistrement d'une transcription de différentes façons en utilisant XSLT.

Si je veux juste présenter la correction à l'utilisateur, je pourrais utiliser un modèle XSLT comme ceci:

<xsl:template match="subst"><xsl:apply-templates select="./add"/></xsl:template> 

<xsl:template match="subst/add"><xsl:apply-templates/></xsl:template> 

Cependant, je pourrais aussi écrire:

<xsl:template match="subst"><xsl:apply-templates/></xsl:template> 

<xsl:template match="subst/add"><xsl:apply-templates/></xsl:template> 

<!-- del: ignore contents --> 
<xsl:template match="subst/del"></xsl:template> 

Dans le premier cas , Je explicitement seulement adresse add à l'intérieur <subst>, en ignorant <del>.

Dans le second cas, j'ignore <del> en fournissant un modèle qui ne fait rien avec l'élément, résultant dans le même effet. Si je ne me trompe pas, les deux façons sont équivalentes. Lequel est préférable?

+0

Il n'y a pas de subst dans votre entrée, donc '' ne fera rien - et c'est là que j'ai arrêté de lire. –

+1

Vous n'êtes pas "ignorer del" en n'ayant pas de modèle pour cela. Cela frapperait un template par défaut alors. –

+0

Désolé, j'ai oublié d'ajouter l'élément subst. Thx, Stefan, votre commentaire était utile – user130685

Répondre

1

À mon humble avis, ne pas traiter du tout les nœuds est préférable de les traiter avec un modèle vide. Mais parfois, l'alternative est plus pratique, par ex. pour des raisons de lisibilité du code.

+0

Pour le premier cas (expression pour select), voir: http://stackoverflow.com/questions/33049741/what-does-it-mean-apply-templates-select – user130685

+0

@ user130685 Que rechercherais-je? –

+0

"Sélectionnez tous les éléments enfants et appliquez les modèles correspondants." Ainsi, les éléments qui ne correspondent pas à l'expression ne sont pas traités du tout. Qu'en est-il du commentaire "Cela frapperait un template par défaut" dans ce cas? – user130685