XML mit JavaScript lesen und ausgeben
Madi
- javascript
Hallo zusammen,
Ich habe ein Problem, das ich mit Googeln net lösen konnte.
Also, In meiner JSP-Seite lade ich aus dem Simulator eine XML-Datei und dafür benutze ich folgende Befehle <c:import var="xml" url="http://localhost:30880/set" charEncoding="UTF-8" > (hier benutze ich JSTL). Nun muss ich den Inhalt dieser XML-Dokument in einer Popup-Fenster anzeigen.
Also ich habe eine JavaScript Funktion implementiert und die funktioniert einwandfrei. Der Function OpenPopUpWindow wird der Inhalt der Popup-Fenster übergeben(Übergabeparameter) wie folgendes OpenPopUpWindow(ContentOfPopUpWindow).
Das Problem liegt nur beim übergeben der Inhalt der XMl-Dokument. Ich erhalte immer eine Fehlermeldung und wenn ich den Quelltext der JSP-Seite anschaue um die Fehler zu lokalisieren und zu identifizieren, stelle ich fest, dass die XMl-Dokument mehrere Zeile hat.
Also meine Frage lautet konkrete wie folgendes:
Wie kann ich das ein mehrere zeilige XML-Dokument an ein JavaScript übergeben?
Bis jetzt habe ich folgende zwei Befehle benutzt:
OpenPopUpWindow(<%=xml%>);
oder
<c:set var="xmldoc" value="${fn:substring(xml, 1, fn:length(xml))}"/>
OpenPopUpWindow("${xmldoc}")
Hi,
[...] stelle ich fest, dass die XMl-Dokument mehrere Zeile hat.
hierbei fällt mir jener bayrische Satz ein, der englische Austauschschüler maximal verwirrt, weil alle drei bestimmten Artikel direkt aufeinander folgen: "I hoff, dass di der Deibel hol'!"
Also meine Frage lautet konkrete wie folgendes:
Bis jetzt habe ich folgende zwei Befehle benutzt:
OpenPopUpWindow(<%=xml%>);
oder
<c:set var="xmldoc" value="${fn:substring(xml, 1, fn:length(xml))}"/>
OpenPopUpWindow("${xmldoc}")
Für clientseitige Belange ist jedweder serverseitige Code absolut irrelevant, und somit ist er bei clientseitigen Problemen vollständig zu eliminieren. Werde Dir zunächst klar darüber, welcher Code beim Client vorliegen soll. Dann und *erst* dann kannst Du Dich an die Erzeugung desselben machen.
Cheatah
das war gerade net so hilfreich. Ich habe kein Problem das XML-Dokument zu abfragen und zu bekommen. Problematisch wird es wenn ich dieses Dokument an JavaScript weitergeben möchte. Ich erhalte folgende Fehlermeldung (Fehler: ";" erwartet und code:0). Die Fehlermeldung bezieht sich auf diese Zeile (Auszug aus Quellcode der HTML-Datei):
<script type="text/javascript">
var javaScriptVar = "<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="./xsl/rtobject.xsl"?>
<Results>
<Object
id="5192837">
<Attribute
.....
</script>
in meinem JavascriptCode habe ich folgendes geschrieben
<script type="text/javascript">
var javaScriptVar = "<%=XmlString%>";
</script>
Hi,
das war gerade net so hilfreich.
dann solltest Du meine Antwort noch mal lesen. Sie war so hilfreich, wie sie aufgrund der Frage sein kann.
Ich habe kein Problem das XML-Dokument zu abfragen und zu bekommen. Problematisch wird es wenn ich dieses Dokument an JavaScript weitergeben möchte.
Nein, auch das ist (bisher) vollkommen unproblematisch. Dein Problem ist, dass Du ungültigen JavaScript-Code erzeugst - diesen musst Du Dir ansehen und korrigieren.
var javaScriptVar = "<?xml version="1.0" encoding="utf-8"?>
JavaScript besitzt zwar einen Befehlstrenner (";"), jeder Befehl endet aber automatisch beim Zeilenende[1]. Somit ist Deine Variablendeklaration hier zu Ende. Zusätzlich ist sie bereits bis hierhin bereits ungültig; Du kannst nicht willkürlich Strings wie "<?xml version=" und Zahlen wie 1.0 aneinanderhängen.
in meinem JavascriptCode habe ich folgendes geschrieben
In Deinem Java-Code. JavaScript wird erst daraus erzeugt.
var javaScriptVar = "<%=XmlString%>";
Wenn Du einen Wert - egal welchen - in einen Kontext - egal in welchen - bringst, musst Du ihn kontextspezifisch kodieren.
Irgendwann erstelle ich mir noch ein Makro für diesen Satz.
Cheatah
[1] Das Zeilenende lässt sich Maskieren. Maskierungszeichen ist, wie in den meisten Sprachen üblich, der Backslash.
Hi Cheatah,
JavaScript besitzt zwar einen Befehlstrenner (";"), jeder Befehl endet aber automatisch beim Zeilenende[1].
[1] Das Zeilenende lässt sich Maskieren. Maskierungszeichen ist, wie in den meisten Sprachen üblich, der Backslash.
ganz so einfach kann es wohl nicht sein, denn auch so etwas
<script type="text/javascript">
var k = Math.round(718.41)
+ 17.7
- 1;
alert(k);
</script>
wird anstandslos interpretiert und ausgeführt, obwohl nach deiner Darstellung bereits hinter Math.round(718.41) die Anweisung wegen des Zeilenendes zu Ende sein müsste. Tatsächlich wird aber die Addition bzw. Subtraktion dreier Terme durchgeführt und das erwartete Ergebnis 734.7 ausgegeben.
Wenn Du einen Wert - egal welchen - in einen Kontext - egal in welchen - bringst, musst Du ihn kontextspezifisch kodieren.
Irgendwann erstelle ich mir noch ein Makro für diesen Satz.
Ich dachte, das hättest du längst ... ;-)
So long,
Martin