Andreas Hippauf: XML mit XSLT in Javascript Transformieren

Beitrag lesen

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.

Für den IE kann man das auch mittels Javascript direkt ansteuern, da ich im Firefox nichts entsprechendes gefunden habe, hab ich das XSLT-Script umgebaut, so dass es nun kein mode mehr verwendet, sondern ein weiteres Attribut über Javascript bekommt.

if (browser == "IE")
 {
  var processor = cache.createProcessor();
  processor.input = src;

// default mode Transformation

if (mode) {
     // processor.setStartMode (mode);
    processor.addParameter ("mode", mode);
    }
  if (variablename) { processor.addParameter (variablename, variablecontent); }

processor.transform();
  result = processor.output;
 }

Das auskommentierte da oben processor.setStartMode (mode) funktioniert wirklich im IE, ruhig mal ausprobieren! Nur im Firefox ist das entweder vergessen worden, oder bewußt nicht gemacht worden, ich weiß es nicht. Wenn man nicht den Quelltext lesen will findet man die entsprechende Info im Netz sehr schlecht, zumindest ich...

»»aber mein Problem hat sich erledigt, ich habe das XSLT so umgeschrieben, das es nur noch ein Root-Element ohne mode verwendet, in dem die einzelnen modes mittels xsl:if Blöcken unterschieden werden. Der Mode wird dann anstatt echter mode mittels Param/Variable an den xsltProcessor übergeben....

Nicht schön, aber führt zumindest zum Ziel.

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

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

Wobei man einiges noch an deinem XML vereinfachen könnte und ein choose-when-otherwise wäre statt den ifs besser geignet.

Stimmt, bau ich mal um, spätestens wenn ich ne Idee hab, ob und wie man das im Opera macht, wirds mit ifthen eh unhandlich.

Wenn jemand noch ne Lösung für den ersten Ansatz findet, daran bin ich natürlich immer noch interessiert, man ist schließlich nicht immer in der glücklichen Lage Einfluss auf das XSLT nehmen zu können.

Du hast diese Lösung bekommen. Eine andere gibt es nicht.

Stimmt nur für den Firefox ;)