2010-04-18 8 views
5

Es klingt einfach, aber keiner meiner "easy" Syntax gearbeitet:wie xsl verwenden Attribut name = "width"

<xsl:param name="length"/> 
<xsl:attribute name="width">$length</xsl:attribute> 
not 
<xsl:attribute name="width"><xsl:value-of-select="$length"></xsl:attribute> 

irgendwelche Vorschläge?

dank

+0

Vielleicht möchten Sie Ihre Beispielcode zu formatieren, um es einfacher zu lesen. Klicken Sie auf den Link "Bearbeiten", markieren Sie Ihr Codebeispiel und klicken Sie auf die Schaltfläche für das Codeformat. – Filburt

+0

Gute Frage, aber Sie müssen Ihren Code formatieren (ich habe es diesmal für Sie getan). +1. Sehen Sie meine Antwort, die zwei Lösungen anbietet und die bessere von ihnen empfiehlt. :) –

Antwort

8

<xsl:attribute name="width">$length</xsl:attribute>

Dies wird die Zeichenfolge $length ein Attribut mit dem Wert erstellen. Aber Sie wollen den Wert des xsl: param mit dem Namen $length.

<xsl:attribute name="width"><xsl:value-of-select="$length"></xsl:attribute>

Hier wird das <xsl:value-of> Element nicht geschlossen ist - das macht den XSLT-Code nicht wohlgeformte XML.

Lösung:

Verwenden Sie eine der folgenden Möglichkeiten:

  1. <xsl:attribute name="width"><xsl:value-of select="$length"/></xsl:attribute>

oder

  1. <someElement width="{$length}"/>

Zur besseren Lesbarkeit und Kompaktheit bevorzugen 2. oben, wann immer möglich zu verwenden.

+1

Ich nehme an, du meinst xsl: value-of, nicht xsl: value-of-select? :) – markusk

+0

@markusk: Danke, dass du das bemerkt hast. Korrigiert. –

1

Sie brauchen wahrscheinlich nicht einmal xsl:attribute hier; Der einfachste Weg, dies zu tun, ist etwas wie:

<someElement width="{$length}" ... >...</someElement> 
1

Ihre erste Alternative schlägt fehl, weil Variablen in Textknoten nicht erweitert werden. Ihre zweite Alternative schlägt fehl, weil Sie versuchen, <xsl:value-of-select="..."> aufzurufen, während die richtige Syntax <xsl:value-of select="..."/> lautet, wie im Abschnitt Generating Text with xsl:value-of im Standard beschrieben. Sie können den Code zu beheben, indem

<xsl:attribute name="width"><xsl:value-of select="$length"/></xsl:attribute> 

mit oder, wie andere erwähnt haben, Sie attribute value templates verwenden können:

<someElement width="{$length}" ... >...</someElement>