2009-06-23 18 views
2

Ich bin das Debuggen des XSL-Stylesheet von jemand anderem und ich bemerkte eine Menge von Vorlagen-Treffern zum Ausblenden bestimmter Inhalte.XSL Attribut match case

Ex: <tag hide="X"> 

Also ihre Regeln gehen so etwas.

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

Es scheint eine Übereinstimmung für jedes mögliche Tag zu geben, das im Dokument erscheinen kann, das ungefähr dreißig oder so ist. Meine Frage ist also, gibt es eine bessere Möglichkeit, dies in xsl zu tun, als eine Liste von Vorlagenübereinstimmungen für die gleiche Attributübereinstimmung zu haben?

+0

+1 für belästigen andere Völker Code aufzuräumen – Mir

Antwort

6

Try this:

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

ist Gibt es einen Unterschied zwischen '*' und 'node()'? – jjnguy

+0

Sieht aus wie es das gleiche tut. – maleki

+1

Nein, sind sie nicht. "*" steht ausschließlich für Elementknoten und "node()" für jeden Knotentyp. – Tomalak

2

Falls Sie über spezifischere sein, was die Vorlage übereinstimmt, können Sie tun:

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

Ich mag Ihre alternative Lösung. – maleki