Problem beim Auslesen einer XML-Datei
NicoleK
- javascript
0 wahsaga0 NicoleK0 Thomas Meinike0 NicoleK0 wahsaga0 NicoleK
0 Thomas Meinike
Hallo,
ich habe ein Problem beim Auslesen einer XML-Datei.
die mit PL/SQL erzeugte XML-Datei sieht folgendermaßen aus:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<result id="results">
<divtitle>Corporate Services</divtitle>
<divtitle>Corporate Centers</divtitle>
</result>
Mein Aufruf in der Java-Script-Funktion sieht folgendermaßen aus:
function handleHttpResponse()
{if (http.readyState == 4)
{if (http.responseText.indexOf('invalid') == -1)
{
var xmlDocument = http.responseXML;
alert(http.responseText);
alert(xmlDocument.getElementById('result').length);
alert(xmlDocument.getElementsByTagName('divtitle').length);
...
wobei "http" das XMLrequestObjekt ist.
Der Fehler liegt dann an der Stelle, dass sowohl xmlDocument.getElementById('result').length als auch
xmlDocument.getElementById('divtitle').length "0" ergeben.
Meine Schlussfolgerung sagt mir also, dass das XML-Dokument nicht richtig eingelesen wird oder ich falsch auf die Knoten zugreife. Allerdings weiß ich nicht was ich falsch mache, denn bei einem ähnlichen Script funktioniert der Aufruf ohne Probleme - einziger Unterschied ist, dass die XML-Datei bei diesem Beispiel mit PHP nicht mit PL/SQL erzeugt wird.
hi,
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<result id="results">
<divtitle>Corporate Services</divtitle>
<divtitle>Corporate Centers</divtitle>
</result>
Der Fehler liegt dann an der Stelle, dass sowohl xmlDocument.getElementById('result').length als auch
xmlDocument.getElementById('divtitle').length "0" ergeben.
Du hast weder ein Element mit der ID "result" noch eines mit der ID "divtitle" in deinem XML-Dokument.
(Darüber hinaus wäre es sinnfrei, bei einem über die ID eindeutig selektierten Element die Länge einer Collection abfragen zu wollen - eben wegen der Eindeutigkeit liefert getElementById nun mal keine Collection, sondern direkt den Knoten zurück [im Erfolgsfall].)
gruß,
wahsaga
Hi wahsaga,
tut mir leid, habe das falsche geposted, heißt eigentlich
xmlDocument.getElementsByTagName('result').length
xmlDocument.getElementsByTagName('divtitle').length
hatte ich vorhin beim ausprobieren geändert
Danke schon mal
Hallo,
xmlDocument.getElementsByTagName('result').length
xmlDocument.getElementsByTagName('divtitle').length
Hier fehlt offenbar documentElement:
xmlDocument.documentElement.getElementsByTagName('result').length
xmlDocument.documentElement.getElementsByTagName('divtitle').length
bzw. gleich vorab darauf beziehen (bezogen auf das Ausgangsposting):
var xmlDocument = http.responseXML.documentElement
MfG, Thomas
Hi,
vielen Dank für die schnelle Antwort.
Also wenn ich documentElement einfüge kommt:
bei var xmlDocument = http.responseXML.documentElement;
im IE der Fehler "null" ist Null oder keine Objekt
oder bei alert(xmlDocument.documentElement.getElementsByTagName('result').length);
im IE der Fehler "documentElement" ist Null oder kein Objekt.
Vielleicht kann ja diese Fehlermeldung zur Fehlerbehebung beitragen.
Vielen Dank schon mal
Nicole
hi,
Also wenn ich documentElement einfüge kommt:
bei var xmlDocument = http.responseXML.documentElement;
im IE der Fehler "null" ist Null oder keine Objektoder bei alert(xmlDocument.documentElement.getElementsByTagName('result').length);
im IE der Fehler "documentElement" ist Null oder kein Objekt.
Wird denn dein XML vom Server auch mit einem korrekten Content type header ausgeliefert?
Wenn XML-Daten lediglich als text/plain ausgeliefert werden, weigern sich manche Browser, es als XML zu behandeln.
gruß,
wahsaga
Wird denn dein XML vom Server auch mit einem korrekten Content type header ausgeliefert?
Hi,
ehrlichgesagt habe ich keine Ahnung ob es den richtigen Content type hat. Wenn ich mir die XML-Datei im IE anzeigen lasse erkennt dieser auf jeden Fall dass es ein XML-Dokument ist.
Ich habe in der PL/SQL-Funktion, die die XML-Datei erzeugt zwar
"htp.p('<?xml version="1.0" encoding="UTF-8" standalone="yes"?>');" stehen aber nichts anderes.
Wie genau müsste denn eine explizite Angabe des Content type lauten?
Vielen, vielen Dank schon mal.
Hallo,
Ich habe in der PL/SQL-Funktion, die die XML-Datei erzeugt zwar
"htp.p('<?xml version="1.0" encoding="UTF-8" standalone="yes"?>');" stehen aber nichts anderes.
Wie genau müsste denn eine explizite Angabe des Content type lauten?
text/xml oder application/xml
Dann schreibe mal vor der Ausgabe der XML-Deklaration (wenn ich htp.p(...) syntaktisch richtig interpretiere):
htp.p('Content-Type: text/xml');
MfG, Thomas
Dann schreibe mal vor der Ausgabe der XML-Deklaration (wenn ich htp.p(...) syntaktisch richtig interpretiere):
htp.p('Content-Type: text/xml');
MfG, Thomas
Hi,
habe das gerade versucht...
aber dann "funktioniert" meine XML-Dokument nicht mehr-
der Fehler lautet "End of headers not found!"...
ich habe keine Ahnung wie ich den Header abschließen soll, schließlich habe ich ihn ja nicht explizit geöffnet.
MfG Nicole
htp.p('Content-Type: text/xml');
So okay, das Problem ist behoben
muss heißen:
htp.p('Content-Type: text/xml');
htp.p('');
--- ich weiß zwar nicht warum aber so funktioniert es.
Und endlich kann ich auch auf die Knoten zugreifen.
Vielen lieben Dank euch allen,
ohne euch hätte ich das Problem in hundert Jahren nicht gelöst.
Hallo,
der Fehler lautet "End of headers not found!"...
ich habe keine Ahnung wie ich den Header abschließen soll, schließlich habe ich ihn ja nicht explizit geöffnet.
Der Header "Content-Type: text/xml" ist richtig.
Mit der PL/SQL-Syntax kenne ich mich nicht aus, vielleicht hilft dieser Export-Code.
Alternativ gibt es noch die Moeglichkeit, clientseitig mit der Methode overrideMimeType("text/xml") zu arbeiten, die der IE allerdings nicht kennt.
MfG, Thomas
Hallo,
Also wenn ich documentElement einfüge kommt:
bei var xmlDocument = http.responseXML.documentElement;
im IE der Fehler "null" ist Null oder keine Objekt
Dann stimmt generell etwas nicht. Hier mal ein Test, der mit und ohne documentElement funktioniert (IE 5.5 / 6.0, FF 1.5, OP 8.5 / 9.0 TP1).
Das geladene XML-Dokument ajaxtest.xml:
<?xml version="1.0" encoding="ISO-8859-1"?>
<bla>
<blub>1</blub>
<blub>2</blub>
<blub>3</blub>
</bla>
oder bei alert(xmlDocument.documentElement.getElementsByTagName('result').length);
im IE der Fehler "documentElement" ist Null oder kein Objekt.
Vermutlich wird der Code gar nicht im HTTP-Kontext ausgefuehrt?
Den Zugriff ueber documentElement habe ich uebrigens explizit beim Arbeiten mit SVG [Beispiel], also im unmittelbaren XML-Umfeld benoetigt [sowohl mit ASV + getURL() als auch mit FF 1.5 + XMLHttpRequest()].
MfG, Thomas