![]() |
| | Themen-Optionen | Thema durchsuchen |
| | Nach oben #1 | ||
| Benjamin Klaile Registriert seit: 02.12.2004 Ort: Remagen
Beiträge: 4.516
|
Hallo, ich bin ein Laie, was die Verwendung von XML mit PHP angeht. Das mal im Voraus. Ich wollte gerne ein XML-Dokument auslesen und die Daten danach in Form eines Arrays vorliegen haben. Über Google bin ich dann auf diese Funktion hier gestoßen. Mein Quelltext sieht nun folgendermaßen aus: PHP-Code: Zitat:
Wäre super, wenn mir da jemand weiterhelfen könnte. Grüße, Ben. [EDIT] Okido. Hab das jetzt mal so gemacht PHP-Code: Zitat:
Geändert von Ben (15.06.2006 um 17:44 Uhr) | ||
| | |
| | Nach oben #2 |
| Gast
Beiträge: n/a
|
DomDocument::getElementsByTagName liefert ein DomNodeList Objekt und ein DomNodeList Objekt hat keine Methode has_child_nodes. DomNode dagegen hat eine hasChildNodes() Methode. Für dich ist vielleicht die DomNodeList::items (index) Methode interessant, weil die ein DomNode Objekt zurückliefet Aber poste doch mal deine XML Datei, damit wir dir besser helfen können. Btw.: SimpleXML ist in für deine Aufgabe anscheinend besser geeignet. DomDocument läd nämlich das gesamte Dokument und weil du nur die 'config' Elemente haben willst brauchst du nicht das gesamte Dokument. Außerdem solltest du nicht die statische Methode DOMDocument::load verwenden, sondern ein Objekt von DomDocument instanzieren weil erstere bei E_STRICT einen WARNING ausgibt. Jay Geändert von Jay (15.06.2006 um 18:33 Uhr) |
|
| | Nach oben #3 |
| Benjamin Klaile Registriert seit: 02.12.2004 Ort: Remagen
Beiträge: 4.516
|
Da in dem Dokument nur die "config"-Sachen drin sind sollte sich der Unterschied zu SimpleXML in Grenzen halten, oder? Die XML-Datei sieht so aus Code: <?xml version='1.0' standalone='yes'?> <config> <database> <host>localhost</host> <user>root</user> <password></password> <name>shop</name> <prefix>shop__</prefix> </database> <general> <mod_rewrite>true</mod_rewrite> <controller>Controller</controller> </general> </config> Ich wollte nur zeigen, was ich derzeit habe. Ich weiß, dass es falsch ist. Die Verwendung der Methode items() habe ich nicht so ganz verstanden .. Danke für jede weitere Hilfe. Grüße, Ben. |
| | |
| | Nach oben #6 |
| Gast
Beiträge: n/a
|
Jeder Knoten ist ein DomNode und DomNodeList fast alle Unterknoten in einem Objekt zusammen, wobei ein Unterknoten eben ein DomNode ist. Um jetzt da durch zu iterieren braucht man logischerweise eine foreach Schleife oder wenn man es mit einer for Schleife macht die Methode items, die Praktisch eine getter Methode ist. Die PHP Dokumentation zum Thema DOM ist nicht wirklich perferkt, deshalb solltest du dir die W3C Spezifikation durchlesen, weil PHP ja auch nix anderes macht als diese zu implementieren. EDIT: Die Funktion ist IMHO ein Blödsinn (zumindest für PHP5), weil es die Methoden überhaupt net gibt. Jay Geändert von Jay (15.06.2006 um 19:58 Uhr) |
|
| | Nach oben #7 | |
| Benjamin Klaile Registriert seit: 02.12.2004 Ort: Remagen
Beiträge: 4.516
|
Ja, das habe ich schon verstanden .. also was rauskommen sollte. Aber wenn ich jetzt das hier mache PHP-Code: Zitat:
| |
| | |
| | Nach oben #8 |
| Gast
Beiträge: n/a
|
Du übergibts einen DomNode allerdings hat die DomNode Klasse keine has_child_nodes () Methode. Deshalb musst du eine DomNodeList übergeben und die Methoden in PHP 5 konforme Methoden/Eigenschaften umwandeln oder du setzt dich mit dem DOM auseinander und schreibst dir selbst was. Wenn du willst kann ich dir auch schnell was zusammen basteln.
|
|
| | Nach oben #12 |
| Gast
Beiträge: n/a
|
So da ich schon so lange nix mehr in PHP programmiert habe (nur mehr VB.NET ahhh ich hasse diese Syntax), hab ich die Funktion nun doch geschrieben. PHP-Code: |
|
| | Nach oben #13 |
| Benjamin Klaile Registriert seit: 02.12.2004 Ort: Remagen
Beiträge: 4.516
|
Jou, so wie ich das sehe ist die Verschachtelungstiefe hier aber beschränkt, weil keine Rekursion genutzt wird, gell? Nun. Egal. Danke dafür .. werd ich mir mal anschauen und durcharbeiten. Die rekursive Sache werd ich mir dann selbst zusammenbauen. Nochmals danke. Bei Fragen melde ich mich nochmals. Grüße, Ben. |
| | |
| | Nach oben #14 |
| Gast
Beiträge: n/a
|
Naja Rekursion ist ja bei deiner Sache auch nicht zu empfehlen, weil der DOM schon langsam ist und dann auch noch Rekursion ... . Aber das kannst du eh ganz einfach machen indem du die letzte Schleife mit einem Funktionsaufruf ersetzt und das array modifizierst. Jay |
|
![]() |
| Lesezeichen |
| Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1) | |
| Themen-Optionen | Thema durchsuchen |
| |