Thomas J.S.: XML mit XSLT in Javascript Transformieren

Beitrag lesen

Hallo,

Nein, die Frage habe ich dir beantwortet: du kannst das mode-Attribut eines Templates nicht direkt als Paramter einem Apply-Templates übergeben, weder im IE noch sonstwo, schlicht weil der Wert des mode-Attributes ein sogenannter QName (Qualifizierter XML-Name) sein muss d.h. es werden keine Variblen etc. aktzptiert.

Scheinbar hab ich mein Problem unklar beschrieben: nicht im XSLT-Skript will ich das mode-Attribut an ein Template "übergeben", sondern ich will Templates je nach Modus anwenden. Das sollte mit XSLT gehen, zumindest laut W3C.

Wie gesagt, das geht auch, aber:

Für den IE kann man das auch mittels Javascript direkt ansteuern, da ich im Firefox nichts entsprechendes gefunden habe,

Was MS macht (setStartMode) ist zwar wirklich interessant, aber eben eine hauseigene Erweiterung des MXSMLs.

Was du nämlich möchtest ist:
<xsl:param name="mode" />
...
<xsl:apply-templates select="autos" mode="{$mode}" />

Und das geht nicht im XSLT. Wenn du das so verstanden hast, hast du etwas in der W3C-Specifikation falsch interpretiert.

Die behaptung von MS:
------------------------
Using setStartMode is essentially the same as an XSLT style sheet that starts with the following rule.

<xsl:template match="/">
   <xsl:apply-templates select="*" mode="{mode}"/>
</xsl:template>
------------------------
bezieht sich ja auch nur auf den JavaScript aufruf.

Das ist nicht "erldigt" sondern die einzige Lösung deines Problems.

Nein, im IE ging es wie oben geschrieben mit dem Mode wunderbar.

Versuche mal im IE das so zu machen (das du den Parameter mode normal mit addParameter übergibst):
<xsl:param name="mode" />
...
<xsl:apply-templates select="autos" mode="{$mode}" />

Er wird das auch ankreiden:
"Dieser Name darf nicht das Zeichen '{' enthalten: -->{<--$mode}"

Wie gesagt, die Möglichkeit mit JavaScript dies vorzutäuschen ist eine proprietäre Erweiterung, die nichts mit XSLT zu tun hat.

Natürlich sehe ich ein, dass das für dich ärgerlich ist, aber anderes als beschrieben kannst du es nicht machen.

Grüße
Thomas