2016-10-06 8 views
0

Ich benutze XPATH 1.0 und XSLT 1.0. Ich frage mich, ob der folgende CodeVerlangsamt der CDATA die XSLT-Transformation in XSLT 1.0

<xsl:choose> 
    <xsl:when test="@name='some'"><![CDATA[one]]></xsl:when> 
    <xsl:otherwise><![CDATA[two]]></xsl:otherwise> 
</xsl:choose> 

einen Unterschied bei der Leistung hat mit

<xsl:choose> 
     <xsl:when test="@name='some'"><xsl:value-of select="'one'"/></xsl:when> 
     <xsl:otherwise><xsl:value-of select="'two'"/></xsl:otherwise> 
    </xsl:choose> 

wenn wir, dass es wissen für einige spezielle Symbole in der Auswahl kein notwendig sein muss? Ist es eine gute Praxis, <![CDATA[one]]> zu verwenden. Oder seine Verwendung verringern die xslt Kompilierzeit, oder es ist einfach zu lesen ??

+0

Ich weiß nicht, über die Leistung, aber ich würde verwenden 'xsl: Text' zur Ausgabe wörtlichen Text. Oder, wenn Sie keine Leerzeichen haben, um sich Sorgen zu machen, schreiben Sie einfach den wörtlichen Text, z. ' one'. –

+1

Warum brauchen Sie eine CDATA alle, warum können Sie 'xsl nicht verwenden: wenn test =" @ name = 'some' "> one'? Was die Leistung anbetrifft, messen Sie einfach, dass der XSLT-Prozessor überhaupt nicht mit dem CDATA arbeitet, sondern dass er ohnehin vom zugrunde liegenden XML-Parser in einen Textknoten geparst wurde. Ob Xalan schlau genug ist, um eine Konstante zu optimieren: > Ich weiß es nicht. –

+0

Es ist niemals notwendig, CDATA-Abschnitte um Text zu verwenden, der keine Sonderzeichen wie '<' und '&' enthält. Aber es ist unwahrscheinlich, dass mehr als ein oder zwei Nanosekunden Verarbeitungsaufwand entstehen, und das sind einmalige Kosten bei der Stylesheet-Erstellung. –

Antwort

0

Meiner Meinung nach, wenn es eine Leistungsverbesserung gibt, ist es nicht so wichtig, Ihr erstes Beispiel zu rechtfertigen.

In diesem Fall würde ich mehr Aufmerksamkeit auf Wartung und Lesbarkeit als Ihr zweites Beispiel achten. Wenn Sie mit dieser Lösung ändern möchten, wie Elemente gerendert werden sollen (als cdata oder nicht), können Sie das Attribut cdata-section-elements im Ausgabeelement verwenden.

Hier ist ein gutes Beispiel davon How to use cdata in xslt

+0

@Martin Honnen Ich habe gerade gesehen, dass die akzeptierte Antwort der Frage, die ich zitiert habe, deine ist :) – Aris2World

Verwandte Themen