HighDots Forums  

XML-Daten auslesen

Javascript (German) Programmiersprache JavaScript. (de.comp.lang.javascript)


Discuss XML-Daten auslesen in the Javascript (German) forum.



Reply
 
Thread Tools Display Modes
  #1  
Old   
Sebastian Suchanek
 
Posts: n/a

Default XML-Daten auslesen - 03-01-2007 , 03:39 PM






Hallo NG!

Ich habe jetzt schon alles mögliche probiert, aber irgendwie
stelle ich mich zu dämlich an... :-(

Doch der Reihe nach: Ich versuche gerade, in AJAX einzusteigen.
Das Anfordern von XML-Daten vom Server funktioniert schon
(erfolgreich getestet). Die ankommende Daten haben die folgende
Form:

Quote:
root
operator><id>1</id><name>Klaus</name></operator
operator><id>2</id><name>Bärbel</name></operator
[...]
/root
Was ich noch nicht hinbekomme, ist an die einzelnen Taginhalte
(also "1", "Klaus", "2" und "Bärbel") heranzukommen. Wie
bewerkstelligt man sowas am elegantesten?


TIA,

Sebastian

--
http://www.baumaschinen-modelle.net
http://www.schwerlast-rhein-main.de


Reply With Quote
  #2  
Old   
Sebastian Suchanek
 
Posts: n/a

Default Re: XML-Daten auslesen - 03-02-2007 , 03:44 AM






Sebastian Suchanek macht die Ingrid:

Quote:
[...]
Was ich noch nicht hinbekomme, ist an die einzelnen Taginhalte
(also "1", "Klaus", "2" und "Bärbel") heranzukommen. Wie
bewerkstelligt man sowas am elegantesten?
[...]
Hat sich erledigt. "textContent" war die gesuchte
Objekteigenschaft. :-)


Tschüs,

Sebastian


Reply With Quote
  #3  
Old   
Martin Honnen
 
Posts: n/a

Default Re: XML-Daten auslesen - 03-02-2007 , 07:41 AM



Sebastian Suchanek wrote:

Quote:
"textContent" war die gesuchte Objekteigenschaft. :-)
Beachte, das textContent im W3C DOM Level 3 Core definiert ist, was kein
Browser zur Zeit vollstaending unterstuetzt. Allerdings wird textContent
von Opera 9, aber nicht Opera 8, und von neueren Mozillas unterstuetzt.
IE/MSXML habe kein textContent im XML DOM, sondern einfacht text.

--

Martin Honnen
http://JavaScript.FAQTs.com/


Reply With Quote
  #4  
Old   
Sebastian Suchanek
 
Posts: n/a

Default Re: XML-Daten auslesen - 03-02-2007 , 11:23 AM



Thus spoke Martin Honnen:

Quote:
Sebastian Suchanek wrote:

"textContent" war die gesuchte Objekteigenschaft. :-)

Beachte, das textContent im W3C DOM Level 3 Core definiert
ist, was kein Browser zur Zeit vollstaending unterstuetzt.
Allerdings wird textContent von Opera 9, aber nicht Opera
8, und von neueren Mozillas unterstuetzt. IE/MSXML habe
kein textContent im XML DOM, sondern einfacht text.
Stimmt. :-(
"text" scheint im Gegenzug aber weder Firefox noch Netscape zu
kennen. Das kann doch nicht sein, daß ich für so einen Kleinkram
bereits eine Browserweiche brauche!?

Außerdem habe ich gerade bemerkt, daß mein bisheriger JS-Code
sowohl IE6 als auch IE7 derart aus der Bahn wirft, daß sie gar
nichts mehr rendern wollen. :-(

Könnte bitte jemand mal einen Blick auf den Code werfen und mir
sowohl mit dem text/textContent- als auch mit dem IE-Problem
weiterhelfen?

------------------------------ 8< ----------------------------

var httpRequest;

// *** Make request to server ***
function request(url, handler) {
if (window.XMLHttpRequest) { // Mozilla, Safari, ...
httpRequest = new XMLHttpRequest();
if (httpRequest.overrideMimeType) {
httpRequest.overrideMimeType('text/xml');
}
} else if (window.ActiveXObject) { // IE
httpRequest = new ActiveXObject("Microsoft.XMLHTTP");
}

if (!httpRequest) return;

loadpage = url;

httpRequest.onreadystatechange = handler;
httpRequest.open('GET', url, true);
httpRequest.send(null);
}

// *** Update "operators" form field with AJAX data ***
function updateoperators() {
if (httpRequest.readyState == 4) {
if (httpRequest.status == 200) {
alert(httpRequest.responseText);
var xmldoc = httpRequest.responseXML;
var root = xmldoc.getElementsByTagName("root")[0];
var i = 0;
while (root.getElementsByTagName("operator")[i]) {
var operator = root.getElementsByTagName("operator")[i];
alert(operator.getElementsByTagName("id")[0].text);
i++;
}
} else {
alert('There was a problem with the request.');
}
}
}

------------------------------ 8< ----------------------------

Das steht so in einer separaten .js-Datei, die in der Webseite
eingebunden wird. Der Aufruf dort erfolgt mittels

<umbrochen>
onChange="request(\'ajax.php?get=operators&country =\'+document.
mainform.country.value,updateoperators)"
</umbrochen>

Die Funktion "request" ist übrigens mit Ausnahme der Variablen-
Handler-Modifikation 1:1 von einer AJAX-Tutorial-Seite im Web
übernommen.


TIA,

Sebastian

--
http://www.baumaschinen-modelle.net
http://www.schwerlast-rhein-main.de


Reply With Quote
  #5  
Old   
Martin Honnen
 
Posts: n/a

Default Re: XML-Daten auslesen - 03-02-2007 , 11:52 AM



Sebastian Suchanek wrote:

Quote:
"text" scheint im Gegenzug aber weder Firefox noch Netscape zu
kennen. Das kann doch nicht sein, daß ich für so einen Kleinkram
bereits eine Browserweiche brauche!?
Das haengt vom XML ab, das ankommt. Wenn du sicher bist, dass keine
leeren Elemente kommen, dann kannst du eventuell direkt den Textknoten
auslesen, also mit z.B.

<gods>
<god>
<name>Kibo</name>
<power>42</power>
</god>
<god>
<name>Xibo</name>
<power>-42</power>
</god>
</gods>

var xmlDoc = httpRequest.responseXML;
for (var gods = xmlDoc.getElementsByTagName('god'),
l = gods.length, i = 0; i < l; i++) {
var god = gods[i];
var nameText = god.getElementsByTagName('name')[0].firstChild.data;
alert(nameText);
}

Quote:
Außerdem habe ich gerade bemerkt, daß mein bisheriger JS-Code
sowohl IE6 als auch IE7 derart aus der Bahn wirft, daß sie gar
nichts mehr rendern wollen. :-(
Gibt es mit IE Fehlermeldungen, wenn ja, welche, fuer welche
Scriptanweisung?


Quote:
onChange="request(\'ajax.php?get=operators&country =\'+document.
ajax.php sollte
header('Content-Type: application/xml')
senden, wenn du responseXML benutzen willst


--

Martin Honnen
http://JavaScript.FAQTs.com/


Reply With Quote
  #6  
Old   
Sebastian Suchanek
 
Posts: n/a

Default Re: XML-Daten auslesen - 03-02-2007 , 12:07 PM



Thus spoke Martin Honnen:
Quote:
Sebastian Suchanek wrote:

"text" scheint im Gegenzug aber weder Firefox noch
Netscape zu kennen. Das kann doch nicht sein, daß ich für
so einen Kleinkram bereits eine Browserweiche brauche!?

Das haengt vom XML ab, das ankommt. Wenn du sicher bist,
dass keine leeren Elemente kommen,
Dafür könnte ich sorgen, das wäre weniger ein Problem.

Quote:
dann kannst du eventuell direkt den Textknoten auslesen, also
mit z.B.

gods
god
name>Kibo</name
power>42</power
/god
god
name>Xibo</name
power>-42</power
/god
/gods

var xmlDoc = httpRequest.responseXML;
for (var gods = xmlDoc.getElementsByTagName('god'),
l = gods.length, i = 0; i < l; i++) {
var god = gods[i];
var nameText =
god.getElementsByTagName('name')[0].firstChild.data;
alert(nameText);
}
Funktioniert leider nicht. Sowohl Firefox als auch Netscape
geben hier ein "undefined" bzw. gar nichts zurück.

Quote:
Außerdem habe ich gerade bemerkt, daß mein bisheriger
JS-Code sowohl IE6 als auch IE7 derart aus der Bahn wirft,
daß sie gar nichts mehr rendern wollen. :-(

Gibt es mit IE Fehlermeldungen, wenn ja, welche, fuer
welche Scriptanweisung?
Keine, die ich gesehen oder gefunden hätte. Das heißt aber nicht
viel, weil ich IE eigentlich nur zum Testen selbstgeschriebener
Seiten verwende (und bislang nicht viel mit JS gemacht habe).

Quote:
ajax.php sollte
header('Content-Type: application/xml')
senden, wenn du responseXML benutzen willst
Ich hatte "text/xml" als Content-Type gesetzt, aber das scheint
im Bezug auf meine Probleme keinen Unterschied zu machen.


Tschüs,

Sebastian

PS: URL mit dem kompletten Konstrukt auf Anfrage gerne per Mail.

--
http://www.baumaschinen-modelle.net
http://www.schwerlast-rhein-main.de


Reply With Quote
  #7  
Old   
Martin Honnen
 
Posts: n/a

Default Re: XML-Daten auslesen - 03-02-2007 , 12:41 PM



Sebastian Suchanek wrote:

Quote:
dann kannst du eventuell direkt den Textknoten auslesen, also
mit z.B.

gods
god
name>Kibo</name
power>42</power
/god
god
name>Xibo</name
power>-42</power
/god
/gods

var xmlDoc = httpRequest.responseXML;
for (var gods = xmlDoc.getElementsByTagName('god'),
l = gods.length, i = 0; i < l; i++) {
var god = gods[i];
var nameText =
god.getElementsByTagName('name')[0].firstChild.data;
alert(nameText);
}

Funktioniert leider nicht. Sowohl Firefox als auch Netscape
geben hier ein "undefined" bzw. gar nichts zurück.
Hier ist ein komplettes Beispiel
<http://home.arcor.de/martin.honnen/javascript/2007/03/test2007030201.html>
ich verstehe nicht, warum das mit Firefox nicht funktionieren sollte.
Hier funktioniert das mit Firefox 2.0 ohne Probleme, es werden zwei
alert-Dialoge mit dem name-Inhalt ("Kibo", "Xibo") angezeigt.


Quote:
Keine, die ich gesehen oder gefunden hätte. Das heißt aber nicht
viel, weil ich IE eigentlich nur zum Testen selbstgeschriebener
Seiten verwende (und bislang nicht viel mit JS gemacht habe).
<http://www.glasgoogle.de/>

--

Martin Honnen
http://JavaScript.FAQTs.com/


Reply With Quote
  #8  
Old   
Bernd Hohmann
 
Posts: n/a

Default Re: XML-Daten auslesen - 03-02-2007 , 12:57 PM



Sebastian Suchanek wrote:

Quote:
var xmlDoc = httpRequest.responseXML;

Funktioniert leider nicht. Sowohl Firefox als auch Netscape
geben hier ein "undefined" bzw. gar nichts zurück.
Lass Dir mal httpRequest.responseText ausgeben, eventuell läuft bei der
Generierung des XML-Baums was schief. Mir ist es mal passiert, dass eine
Hilfsfunktion serverseitig bereits alle < > durch &lt; und &gt;
ausgetauscht hatte.

Bernd

--
Geben Sie bitte keine Antwort auf sterben betreffende Mitteilung.
E-Mail, gesandt ein Sterben betreffende Adresse, braucht keine Antwort.
Um Hilfe zu leisten, gehen Sie ins System Ihres Kontos bei CitiBank ein
und wählen Sie Bastelraum Hinweis Hilfe auf der beliebigen Seite aus.


Reply With Quote
  #9  
Old   
Sebastian Suchanek
 
Posts: n/a

Default Re: XML-Daten auslesen - 03-02-2007 , 01:09 PM



Thus spoke Martin Honnen:
Quote:
Sebastian Suchanek wrote:

[...]
ich verstehe nicht, warum das mit Firefox nicht
funktionieren sollte. Hier funktioniert das mit Firefox 2.0
ohne Probleme, es werden zwei alert-Dialoge mit dem
name-Inhalt ("Kibo", "Xibo") angezeigt.
Ich habe den fraglichen Code nochmal direkt von Deiner Seite
runterkopiert und jetzt geht's - möglicherweise irgendein
Tippfehler meinerseits...

Quote:
Keine, die ich gesehen oder gefunden hätte. Das heißt aber
nicht viel, weil ich IE eigentlich nur zum Testen
selbstgeschriebener Seiten verwende (und bislang nicht
viel mit JS gemacht habe).

http://www.glasgoogle.de/
Das Problem hat sich auch erledigt. Ich hatte hinter <script>
das schließende Tag vergessen und das mag IE offensichtlich
nicht...


Tschüs,

Sebastian

--
http://www.baumaschinen-modelle.net
http://www.schwerlast-rhein-main.de


Reply With Quote
Reply




Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off



Powered by vBulletin Version 3.5.4
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.