Wert eines XML-Knotens auslesen
rein
- javascript
0 Andreas Dölling0 Axel Richter1 Axel Richter0 rein1 Axel Richter0 rein
Hallo Leute,
ich habe mit AJAX eine XML-Struktur in eine Javascript-Variable eingelesen und möchte nun mit Javascript die Werte der Elementknoten auslesen. Seltsamerweise sind alle Javascriptbefehle, die ich finden kann, nicht für Elementknoten geeignet, sondern nur für Textknoten. Mit "nodeName" kann ich zwar ordnungsgemäß den Namen eines Knotens abfragen, die Befehle "data" oder "nodeValue" liefern aber nur "null" (steht auch so in selfhtml). Mit welchem Javascriptbefehl kann ich so eine Struktur auslesen?
Beispiel für eine Struktur:
<Liste>
<Datensatz>
<Feld1>4711</Feld1>
<Feld2>Hallo</Feld2>
</Datensatz>
<Datensatz>
<Feld1>0815</Feld1>
<Feld2>Selber Hallo</Feld2>
</Datensatz>
<Datensatz>
<Feld1>1234</Feld1>
<Feld2>und tschüss</Feld2>
</Datensatz>
</Liste>
Ich möchte gerne den Inhalt von Feld2 im 3. Datensatz ("und tschüss") in eine Variable übernehmen.
Wie geht das? Danke für einen Tip im voraus.
Grüße, Reinhard
Hallo,
Ich möchte gerne den Inhalt von Feld2 im 3. Datensatz ("und tschüss") in eine Variable übernehmen.
Wie geht das? Danke für einen Tip im voraus.
wie hast Du's denn versucht?
Du holst Dir zuerst den betreffenden Elementknoten, klar. Bei dem ist nodeValue natürlich null, denn es ist ja ein Elementknoten und kein Textknoten. Ergo: Du mußt Dir nun noch den Textknoten innerhalb des Elementknotens holen und dessen nodeValue auslesen.
Et voilà!
Ciao,
Andreas
Hallo,
Ich möchte gerne den Inhalt von Feld2 im 3. Datensatz ("und tschüss") in eine Variable übernehmen.
Wie geht das? Danke für einen Tip im voraus.wie hast Du's denn versucht?
In meinem Beispiel (3. Datensatz, Feld2 der Beispielstruktur)habe ich folgendes versucht (das Objekt, in dem die Struktur gespeichert ist,ersetze ich jetzt durch "object":
object.getElementsByTagName("Datensatz")[2].childNotes[1].nodeValue
(abgeleitet aus dem Beispiel zu childNotes in selfhtml; das Beispiel dort bezieht sich aber auf HTML!)
Ich habe auch mit "nodeType" den Typ aller Knoten abgefragt. Es sind alles "Elementknoten", auch die Knoten auf der niedrigsten Ebene. In der Erläuterung zu "nodeValue" steht, daß es bei Elementknoten "null" liefert (nebenbei: die Struktur meines Programms enthält auch Kommentarzeilen. Diese werden ordnungsgemäß angezeigt, da es Textknoten sind). Ebenso steht bei "data", daß es nur bei Textknoten funktioniert.
Hilft diese Erläuterung weiter?
Gruß, Reinhard
Hallo Andreas,
ich habe das Beispiel in meiner Antwort an Axel etwas abgewandelt. Es entspricht so mehr der Struktur meines Programms. Könntest Du Dir das nochmal anschauen?
Vielen Dank im Voraus!
Gruß, Reinhard
Hallo,
ich habe mit AJAX eine XML-Struktur in eine Javascript-Variable eingelesen und möchte nun mit Javascript die Werte der Elementknoten auslesen.
Mit welchem Javascriptbefehl kann ich so eine Struktur auslesen?
Beispiel für eine Struktur:
<Liste>
<Datensatz>
<Feld1>4711</Feld1>
<Feld2>Hallo</Feld2>
</Datensatz>
<Datensatz>
<Feld1>0815</Feld1>
<Feld2>Selber Hallo</Feld2>
</Datensatz>
<Datensatz>
<Feld1>1234</Feld1>
<Feld2>und tschüss</Feld2>
</Datensatz>
</Liste>
Ich möchte gerne den Inhalt von Feld2 im 3. Datensatz ("und tschüss") in eine Variable übernehmen.
Wie geht das? Danke für einen Tip im voraus.
So:
receiveReq.responseXML.getElementsByTagName("Datensatz")[2].childNodes[1].data;
receiveReq ist ein XMLHttpRequest-Object
Allerdings nicht unbedingt immer und mit jeder XML-Ressource.
viele Grüße
Axel
Hallo,
Mit welchem Javascriptbefehl kann ich so eine Struktur auslesen?
Beispiel für eine Struktur:
<Liste>
<Datensatz>
<Feld1>4711</Feld1>
<Feld2>Hallo</Feld2>
</Datensatz>
<Datensatz>
<Feld1>0815</Feld1>
<Feld2>Selber Hallo</Feld2>
</Datensatz>
<Datensatz>
<Feld1>1234</Feld1>
<Feld2>und tschüss</Feld2>
</Datensatz>
</Liste>
Ich möchte gerne den Inhalt von Feld2 im 3. Datensatz ("und tschüss") in eine Variable übernehmen.
Wie geht das? Danke für einen Tip im voraus.So:
receiveReq.responseXML.getElementsByTagName("Datensatz")[2].childNodes[1].data;
Nein. Das ist bei dieser Struktur nicht weit genug.
receiveReq.responseXML.getElementsByTagName("Datensatz")[2].childNodes[1].childNodes[0].data;
oder
receiveReq.responseXML.getElementsByTagName("Datensatz")[2].getElementsByTagName("Feld2")[0].childNodes[0].data;
receiveReq ist ein XMLHttpRequest-Object
viele Grüße
Axel
Hey Axel,
das werde ich gleich morgen ausprobieren. Den Teil "responseXML" habe ich schon benutzt, um das von AJAX gelieferte XML-Objekt in die Variable zu übernehmen. Möglicherweise brauche ich diesen Teil auch beim Auslesen.
Erst mal vielen Dank für den Tip.
Dabei fällt mir noch Folgendes ein:
die XML-Struktur in meinem Programm hat Elemente unterschiedlicher Tiefe. Mein Beispiel müßte eigentlich wie folgt aussehen:
<Liste>
<Titel>Dies ist eine Liste</Titel>
<Datensatz>
<Feld1>4711</Feld1>
<Feld2>Hallo</Feld2>
</Datensatz>
<Datensatz>
<Feld1>0815</Feld1>
<Feld2>Selber Hallo</Feld2>
</Datensatz>
<Datensatz>
<Feld1>1234</Feld1>
<Feld2>und tschüss</Feld2>
</Datensatz>
</Liste>
Es hat mich besonders geärgert, daß ich den Knoten <Titel> nicht lesen konnte (mit den anderen Knoten habe ich mich dann aus Frust nicht mehr beschäftigt). Könnte es sein, daß der Knoten <Titel> als Elementknoten wahrgenommen wird, weil die anderen Knoten auf dieser Ebene nachgeordnete Knoten enthalten? Eigentlich müßte <Titel> doch ein Textknoten sein, weil er keine weiteren Elemente enthält. Kann man Knoten unterschiedlichen Typs auf der gleichen Ebene mischen?
Gruß, Reinhard
Hallo,
das werde ich gleich morgen ausprobieren. Den Teil "responseXML" habe ich schon benutzt, um das von AJAX gelieferte XML-Objekt in die Variable zu übernehmen. Möglicherweise brauche ich diesen Teil auch beim Auslesen.
Nein, wenn Dein Objekt das responseXML referenziert, dann nicht. Das Problem, worüber ich bei der ersten Antwort auch gestolpert bin, ist hauptsächlich das Verständnis der DOM-Knoten.
<Liste>
<Titel>Dies ist eine Liste</Titel>
<Datensatz>
<Feld1>4711</Feld1>
<Feld2>Hallo</Feld2>
</Datensatz>
<Datensatz>
<Feld1>0815</Feld1>
<Feld2>Selber Hallo</Feld2>
</Datensatz>
<Datensatz>
<Feld1>1234</Feld1>
<Feld2>und tschüss</Feld2>
</Datensatz>
</Liste>
Es hat mich besonders geärgert, daß ich den Knoten <Titel> nicht lesen konnte (mit den anderen Knoten habe ich mich dann aus Frust nicht mehr beschäftigt). Könnte es sein, daß der Knoten <Titel> als Elementknoten wahrgenommen wird, weil die anderen Knoten auf dieser Ebene nachgeordnete Knoten enthalten? Eigentlich müßte <Titel> doch ein Textknoten sein, weil er keine weiteren Elemente enthält.
Nein. Das Element TITEL ist ein Element. Es hat wiederum einen DOM-Knoten "Dies ist eine Liste". Das ist dann ein Textknoten.
.getElementsByTagName("Titel")[0].childNodes[0].data
^Elementknoten "Titel" ^Textknoten als childNode von TITEL
oder
.getElementsByTagName("Liste")[0].childNodes[0].childNodes[0].data
^Elementknoten "Liste" ^Elementknoten "Titel" als childNode von LISTE
^Textknoten als childNode von TITEL
viele Grüße
Axel
Hallo Axel,
dieser Tip war der Volltreffer und hat das Problem gelöst.
Da ich an diesem Forum nicht angemeldet bin, kann ich Dir leider keine "offizielle" Bewertung zukommen lassen. Daher bekommst Du hiermit meine inoffizielle Bewertung von 100% = "sehr, sehr hilfreich" überreicht.
Vielen Dank!
Gruß, Reinhard