Sie befinden sich hier im Forenarchiv von phpforum.de wenn Sie direkt ins Forum möchten, klicken Sie bitte hier. Zur Startseite kommen Sie hier.

XML Knotenwert lesen

moins,
aus einer XML-Datei lese ich mit DOM die Knoten, Attribute und Werte aus.
Wenn ich die Eigenschaften

Code:                   In Zwischenablage kopieren (nur IE)
1">

oder
Code:                   In Zwischenablage kopieren (nur IE)
2">

auf den jeweiligen Knoten anwende,
erhalte ich auch alle Werte oder Textinhalte die in den Kinderknoten dieses Elements drin sind. Ich möchte aber nur den Wert des angesprochenen Knotens und nicht die restlichen.
Aufruf:
Code:                   In Zwischenablage kopieren (nur IE)
3">

XML-Datei:
Code:                   In Zwischenablage kopieren (nur IE)
4">

Ausgabe:
Code:                   In Zwischenablage kopieren (nur IE)
5">

Es sollte aber eigentlich nix ausgegeben werden, weil das Headerlement selbts ja keinen Textinhalt hat.
Wenn ich statt nodeValue textContent verwende ist das Ergebnis dasselbe.

Gibts da eine Eigenschaft von DomNode oder ä. die ich übersehen habe?
Hier gehts zum Orginal Eintrag "XML Knotenwert lesen" im Forum

Antworten

Hmmm... überprüfe doch erst einmal mit "hasChildNodes()" ob der Knoten noch Unterknoten besitzt, damit kannst du dieses Problem umgehen :)


2.

Das habe ich gemacht. Nun kann es ja aber sein, das in <header> doch ein Wert drin steht, neben den anderen Kindknoten. Den bräuchte ich dann ohne den ganzen Rest.


3.

Ich glaub aber nicht das in Header etwas stehen sollte...
das wäre doch nicht XML-Konform oder?

Generierst du selbst die XML-Daten?
Wenn ja dann solltest du (auch bei target), den inhalt über ein Attribut definieren


4.

Und selbst wenn ich nix im Header drinstehen habe gibt nodeValue oder TextContent immer alle Inhalte dieses Tags als Kette zurück. Kann man denn gar nix machen, ausser die Werte in attribute zu setzen? Die XML-Datei ist vorgegeben und nicht selbst erstellt.
Ich durchlaufe das Dokument jetzt rekursiv und das funktioniert soweit:
Code:                   In Zwischenablage kopieren (nur IE)
6">

Ich bekomme so ein mehrdimensionales Array das alle Knoten enthält a'la
Code:                   In Zwischenablage kopieren (nur IE)
7">

Allerdings ist auch folgendes:
Code:                   In Zwischenablage kopieren (nur IE)
8">

Wie kann ich in der Rekursion sagen, dass nur dann ein "VALUE" zugeteilt wird, wenn es sich um den ""letzten" Elementknoten handelt? Zu allem Überfluss kann man "hasChildNodes" nur bedingt benutzen, da ich in der XML_Datei auch noch Kommentarknoten drin habe, die "hasChildNodes" auch erkennt.


5.

Hast du die Kommentarknoten eindeutig benannt?
Dann kannst diese ausschliessen. :-)


6.

eindeutig benannt?
Sie beginnen mit
Code:                   In Zwischenablage kopieren (nur IE)
9">

und enden mit
Code:                   In Zwischenablage kopieren (nur IE)
10">

Es sind so viele, das ich sie kaum ausschliessen kann.


7.

ich dachte eher an so etwas wie Schalter setzen, Zähler o.ä., hab nur grad keine Idee, wie man das in der Rekursion mit vorwärts und rückwärts so hinbekommt.


8.

Die dürften so aber nicht als Element gewertet werden.


9.

hier noch mal kurz der xml-Teil:
Code:                   In Zwischenablage kopieren (nur IE)
11">

und dann habe ich hasChildNodes eingebaut:
Code:                   In Zwischenablage kopieren (nur IE)
12">

es werden jetzt gar keine Values mehr ins Array gesteckt. In den else-Zweig, wo der Value zugewiesen werden soll, kommt das Programm gar nicht hinein.


10.

Ich habe mir dann noch mal ausgeben lassen, welche Kindknotentypen DOM liefert.

hier noch mal kurz der betreffende xml-Teil:
Code:                   In Zwischenablage kopieren (nur IE)
13">

Die Ausgabe von
Code:                   In Zwischenablage kopieren (nur IE)
14">

liefert dann z.B. für das Element <account>:
Code:                   In Zwischenablage kopieren (nur IE)
15">

wieso wird hier Textinhalt als ChildNode begriffen? Die Elemente nach "account" sind zudem doch gleichrangige Kinder in "login" . "password" und "dbname" stellen sich mir nicht als Kinder von "account" dar. Wo steckt hier der Wurm? Eigentlich sollte "hasChildNodes" für "account" doch nichts mehr liefern,oder?


Hier gehts zum Orginal Eintrag "XML Knotenwert lesen" im Forum
 
phpforum.de | Impressum