2009-06-23 7 views
2

Je suis en train de déboguer la feuille de style xsl de quelqu'un d'autre et j'ai remarqué beaucoup de correspondances de modèles visant à cacher certains contenus.XSL Attribute match case

Ex: <tag hide="X"> 

Donc, leurs règles vont quelque chose comme ça.

<xsl:template match="tag1[@hide='x']" /> 
<xsl:template match="tag2[@hide='x']" /> 
<xsl:template match="tag3[@hide='x']" /> 

Il semble y avoir une correspondance pour toutes les balises possibles qui peuvent apparaître dans le document, soit environ une trentaine. Donc ma question est, y at-il une meilleure façon de faire cela dans xsl que d'avoir une liste de correspondances de gabarit pour le même attribut correspondre?

+0

+1 pour prendre la peine de nettoyer les autres peuples du code est – Mir

Répondre

6

Essayez ceci:

<xsl:template match="*[@hide='x']" /> 
+0

il y a une différence entre '*' et 'node()'? – jjnguy

+0

On dirait que c'est la même chose. – maleki

+1

Non, ils ne le sont pas. "*" est réservé exclusivement aux nœuds d'élément et "node()" correspond à tout type de nœud. – Tomalak

2

Si vous voulez être plus précis sur ce que le modèle correspondant, vous pouvez faire:

<xsl:template match="*[ 
    contains('|tag1|tag2|tag3|' , concat('|', name(), '|')) 
    and 
    @hide='x' 
]" /> 
+0

J'aime votre solution alternative. – maleki