XSL und (Java)Script zur Präsentation von XML

Hallo XML/XSL-Welt,

ich hänge seit zwei Tagen am folgenden Problem und mir gehen langsam die Ideen aus ***mayday***

Sachlage:
Per Servlet werden Daten aus einer Datenbank als XML-Dokument aufbereitet und für eine Schnittstelle (Programm-zu-Programm-Kommunikation) bereitgestellt.

Für unsere Testgruppe habe ich nun per XSL eine Testumgebung gebastelt, damit sie die fachliche Funktionalität der XML-Schnittstelle prüfen können (kommen die richtigen Daten raus…). Benutzt wird der XML-fähige IE5.

Prinzip: Per HTML-Formular Testdaten an Servlet schicken, dieses baut das XML zusammen und gibt noch eine XSL-Datei zur Präsentation der Daten mit. Soweit auch gut.

Nun meine Problem:
Ich benutze für die Präsentation ein XSL-Stylesheet, das mehrfach benutzt wird.

  • Einmal in einem Frameset
  • Einmal als einzelnes Window
    Abhängig davon soll nun ein Button „Schließen“ (beim einzelnen Fenster) oder „Zurück“ (bei der Framesetseite) eingebaut werden.

Ich kann nur über die Anzahl der Frames feststellen, welcher Button eingeblendet werden soll. (parent.frames.length)

Wie bekomme ich es hin, dass nach der Script-Prüfung der entsprechende Button angezeigt wird.

Ich würde im XSL gern einen Code wie folgt einbinden:

<?xml version="1.0" encoding="ISO-8859-1"?>

if(parent.frames.length != 0) {
document.write("");
}
else {
document.write("");
}

Das mag der IE aber nicht und schmettert meinen Versuch mit „Keyword xsl:script may not be used here.“ ab.

Ich könnte mir alternativ vorstellen, dass ich per JavaSript die Anzahl der Frames feststelle, und das Ergebnis in eine XSL-Variable schreibe. Dann mach ich ein xsl:if auf diese Variable (bzw. ein xsl:when oder xsl:otherwise) und gebe davon abhängig die Buttons aus.

Aber da fehlt mir die Vorstellungskraft, wie ich sowas umsetzen könnte (Kommunikation JavaScript/XSL per „gemeinsamer“ Variablen).

Kann mir jemand helfen???

Vielen Dank für das Lesen und für Impulse/Ideen…

Jürgen Kneller

Ergänzung zu XSL und (Java)Script
Hallo,

nun hänge ich schon seit drei Tagen an dem Problem. Und so langsam geistert es trotz des schönen Wetters schon nach Feierabend in meiner Birne rum…

Also schreib ich mal auf, was da so geistert, bzw. was ich noch mal so probiert habe. Ein Impuls wäre, im Bsp. von gestern ohne „xsl“ im Script-Tag zu arbeiten, also:

<?xml version="1.0" encoding="ISO-8859-1"?>

if(parent.frames.length != 0) {
alert („parent.frames.length: „+parent.frames.length);
document.write(“<input type=‚button‘ value=‚zurueck‘
onClick=‚history.back()‘ />“);
}
else {
alert(„parent.frames.length: „+parent.frames.length);
// document.write(“<input type=‚button‘ value=‚schliessen‘
onClick=‚window.close()‘ />“);
}

Das mag der IE aber nun auch wieder nicht.
Die alert-Ausgabe funktioniert noch aber dann schmeißt der IE den JavaScript-Fehler: „)“ erwartet…

Scheinbar mag JavaScript das Hochkomma vor dem 'button nicht.
Ohne Hochkomma beim button quakt allerdings und logischerweise der XML-Parser, weil Attribute ja nun mal in Hochkomma stehen sollen.

Ein Entwerten der Hochkommas per Backslash bringt auch nichts.
Nur das Ausdokumentieren (siehe else-Fall) beseitigt den Fehler, hilft mir aber logischerweise nicht weiter :wink:

Na, hilft das irgendjemand irgendwie weiter???

See you, here you, mail you…

Jürgen

P.S.:
Wer mal sehen will wie ich (noch) lache(n kann),
der besuche mich mal unter http://home.t-online.de/home/kneller/

Das mag der IE aber nun auch wieder nicht.
Die alert-Ausgabe funktioniert noch aber dann schmeißt der IE
den JavaScript-Fehler: „)“ erwartet…

Scheinbar mag JavaScript das Hochkomma vor dem 'button nicht.
Ohne Hochkomma beim button quakt allerdings und logischerweise
der XML-Parser, weil Attribute ja nun mal in Hochkomma stehen
sollen.

Hallo Jürgen,

versuche mal den JavaScipt Code in ein Element zu packen, ich glaube dass dann nur der Text ausgeben wird, ohne darin enthaltene Attribute auf korrekte Synthax zu prüfen, man müsste dann die Hochkommas weglassen können. Habs aber nicht getestet.
Also:

<xsl:text disable-output-escaping=„yes“>
if(parent.frames.length != 0)
{
alert („parent.frames.length: „+parent.frames.length);
document.write(“<input type=button value=zurueck
onClick=history.back() />“);
}
</xsl:text>

mfg
Stefan

Hallo Stefan,

vielen Dank für Deinen Impuls!

Hab ich natürlich gleich mal ausprobiert…
…Mist, dieser dusselige IE verweigert den Gebrauch von xsl:text , er bringt den Fehlerhinweis „Keyword xsl:text may not be used here“.

Der IE 5.50.4522.1800CO verweigert xsl:text im Bodybereich des XSL-Scripts scheinbar, weil ich als Namespace benutze.

Also gleich mal geändert gegen
Also sieht der Code so aus:

**<?xml version="1.0" encoding="ISO-8859-1"?>

<xsl:text disable-output-escaping=„yes“>
alert(„hallo“);
</xsl:text>

…**

Mist, nun bringt der Browser einen Syntaxfehler.
Schade, das geht irgendwie auch nicht…

Ich träume ja immer noch von der „Lösung“, per Javascript die Anzahl der Frames zu prüfen und das Ergebnis in einer Variablen zu speichern. Dann abhängig vom Variableninhalt ***hüstel*** per und und die Ausgabe der Formularbuttons (reines HTML) steuern…

Wie gesagt, ich träume…
Oder hat noch jemand eine Idee???

Ich wünsche schon mal ein schönes und weiterhin sonniges Wochenende und viel Spass beim Baden!

Jürgen

Wie gesagt, ich träume…
Oder hat noch jemand eine Idee???

Ich wünsche schon mal ein schönes und weiterhin sonniges
Wochenende und viel Spass beim Baden!

Jürgen

Hi Jürgen,

dann kannst du es noch mit einer CDATA-Section versuchen, hat bei mir funktioniert:

<![CDATA[
document.write("<input type=button value=test />")
]]>

Die Hochkommas entweder weglassen oder mit Backslash als Escape-Sequenz.

Gleichfalls schönes Wochenende

Stefan

Hallo Stefan,

vielen Dank für den CDATA-Impuls.
Dieses Vorgehen hatte ich schon ausprobiert,
das hat aber auch nicht funktioniert.

Der in den CDATA-Bereich eingeschlossene Codebereich wird einfach nicht geparst, aber von JavaScript leider auch nicht interpretiert.

Der Code wird einfach nur als Text ausgegeben.
Hier im Bsp. wird im Browser einfach nur der Text

angezeigt.

Ich denke, dass ich an dieser Stelle lieber abbreche, da der Lösungsaufwand langsam zu gross wird.

Vielen Dank an Stefan und alle anderen, die versucht haben mir zu helfen.

Eine schöne Woche (für den Rest :wink:

Jürgen