| XML Hier passt alles rein, was das Thema XML (XSLT, etc...) betrifft, auch in Verbindung mit PHP |
 |

09-08-2009, 17:46
|
|
Seikilos
Registrierter Benutzer
|
|
Registriert seit: May 2003
Ort: Vor meinem Computer
Beiträge: 494
|
|
[gelöst] DOMElement::childNodes, wieso DOMText?
Ich hab mir mal den Dreck angeguckt, der bei PHP als XML Bibliothek durchgeht und hab nun alle durch.
Was mich bei DOMDocument besonders interessiert ist neben der Tatsache, dass es das am wenigsten unhandliche System in PHP ist, warum laut der Dokue ein DOMElement::childNodes eine DOMNodeList zurück geben soll ich aber ne Liste voller DOMText Elemente bekomme?
PHP-Code:
$objDOM = new DOMDocument(); $objDOM->load($file); //make sure path is correct
$nodes = $objDOM->getElementsByTagName("element"); foreach($node->childNodes as $node) { var_dump(get_class($node)); // <---- DOMText }
Doku zu childNodes:
PHP: DOMNode - Manual
Zitat:
|
A DOMNodeList that contains all children of this node. If there are no children, this is an empty DOMNodeList.
|
Dafür, dass es ein Node ist, ist es ganz schön ein DOMText.
Und in meinem Code sind da Nodes drunter und kein Text.
Von der Hierarchie ist mir klar, das DOMText ein Node ist, aber ich will ein Node und kein Text, ich brauch die Hierarchie der einelnen Nodes, DOMText::wholeText liefert mir auch nichts
|

09-08-2009, 17:54
|
wahsaga
 Moderator
|
|
Registriert seit: Sep 2001
Beiträge: 24.486
|
|
Zitat:
Zitat von Seikilos
Und in meinem Code sind da Nodes drunter und kein Text.
|
Wie sieht denn den XML aus?
Und was liefert die Kontrollausgabe in der foreach-Schleife alles?
__________________
I don't believe in rebirth. Actually, I never did in my whole lives.
|

09-08-2009, 17:56
|
|
Seikilos
Registrierter Benutzer
|
|
Registriert seit: May 2003
Ort: Vor meinem Computer
Beiträge: 494
|
|
Code:
<?xml version="1.0" encoding="iso-8859-1"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" version="1.0">
<xsd:element name="doc">
<xsd:annotation>
<xsd:appinfo>0</xsd:appinfo>
<xsd:documentation>Dokument Element</xsd:documentation>
</xsd:annotation>
<xsd:complexType>
<xsd:sequence>
<xsd:element ref="foo"/>
<xsd:element ref="bar" maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
|

09-08-2009, 18:21
|
wahsaga
 Moderator
|
|
Registriert seit: Sep 2001
Beiträge: 24.486
|
|
Also abgesehen davon, dass dein Beispielcode darauf gar nicht anwendbar ist (wirft natürlich Fehlermeldungen, wenn du auf die childNodes der DOMNodeList, die getElementsByTagName zurückliefert - es muss erst mal ein DOMElement ausgewählt werden), entspricht die Ausgabe der foreach-Schleife (nach entsprechender Korrektur) genau dem, was zu erwarten ist:
Code:
string(7) "DOMText"
string(10) "DOMElement"
string(7) "DOMText"
string(10) "DOMElement"
string(7) "DOMText"
Works as designed.
Hast du da ernsthaft etwas anderes erwartet?
__________________
I don't believe in rebirth. Actually, I never did in my whole lives.
|

09-08-2009, 18:25
|
|
Seikilos
Registrierter Benutzer
|
|
Registriert seit: May 2003
Ort: Vor meinem Computer
Beiträge: 494
|
|
Was soll da denn ein DOMText sein?
|

09-08-2009, 18:34
|
wahsaga
 Moderator
|
|
Registriert seit: Sep 2001
Beiträge: 24.486
|
|
Die Zeilenumbrüche zwischen den Tags der Elemente stellen selbstverständlich auch Textknoten dar (auch wenn diese ausschliesslich Whitespace enthalten).
(Da frag' ich mich jetzt aber doch, wie man dazu kommt, die Klappe derart weit aufzureissen, dass man die XML-Implementierungen in PHP als "Dreck" bezeichnet - wenn offenbar so wenig Ahnung vorhanden ist, dass nicht mal derart grundlegende Dinge in Bezug auf XML bekannt sind ...)
Wenn du an diesen Whitespace-Textknoten nicht interessiert bist - dann setzt du halt die Eigenschaft preserveWhiteSpace des DOMDocuments auf false.
__________________
I don't believe in rebirth. Actually, I never did in my whole lives.
|

09-08-2009, 18:46
|
|
Seikilos
Registrierter Benutzer
|
|
Registriert seit: May 2003
Ort: Vor meinem Computer
Beiträge: 494
|
|
Danke für die Info, das mit dem preserve scheint hilfreich.
Und mich nervt bei php die fehlende Abstraktionsschicht, ich will XML nicht per Hand anfassen müssen.
Darüber hinaus programmiere ich nicht seit gestern und neben AS 2 ist das XML Handling von PHP schlecht, habe damit kein gutes Handling. Das lösen andere Sprachen wesentlich besser, allein das fehlende ORM für XML (abgesehen evtl von SDO ist ein dicker Minuspunkt, weil er mich nun zwingt, ne verfluchte 2,5 K XSD Datei per Hand aufzuarbeiten, n relationales Schema zu bauen und nen parser für die XML selbst zu kreieren, alles Aufgaben, die sich perfekt bis zu nem Punkt automatisieren lassen können
|

10-08-2009, 20:10
|
|
Seikilos
Registrierter Benutzer
|
|
Registriert seit: May 2003
Ort: Vor meinem Computer
Beiträge: 494
|
|
Kein Text
|
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
|
| Themen-Optionen |
|
|
| Thema bewerten |
|
|
Forumregeln
|
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
|
PHP News
|