[gelöst] DOMElement::childNodes, wieso DOMText?

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [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
    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
    SQL Injection kitteh is...

  • #2
    Zitat von Seikilos Beitrag anzeigen
    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.

    Kommentar


    • #3
      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>
      SQL Injection kitteh is...

      Kommentar


      • #4
        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.

        Kommentar


        • #5
          Was soll da denn ein DOMText sein?
          SQL Injection kitteh is...

          Kommentar


          • #6
            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.

            Kommentar


            • #7
              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
              SQL Injection kitteh is...

              Kommentar


              • #8
                Kein Text
                SQL Injection kitteh is...

                Kommentar

                Lädt...
                X