Paul: PHP DOM textContent

Moin,
mit $node->textContent (http://www.php.net/manual/de/class.domnode.php#domnode.props.textcontent) lassen sich alle Nachfahren des aktuellen Knotens "auslesen". Leider hab ich keine Ahnung was zurück gegeben wird, wenn kein textcontent vorliegt.
Wenn ich auf das Ergebnis strlen($ergebnis) anwende, kommt Beispielsweise 235 raus. Also ist das Ergebnis 235 Zeichen lang. Allerdings werden mir bei echo 'a'.$ergebnis.'b' nur die gefüllten Felder ausgegeben. Wenn kein textcontent vorliegt, kommt nur ein a b raus, egal wie lang der String ist.

Nun möchte ich aber per if($ergebnis == ' ') abfragen ob in allen Knoten nichts drin steht, läuft aber nicht. Wie kann abfragen, ob kein Ergnis gefunden wurde?

  1. Hi!

    Wenn ich auf das Ergebnis strlen($ergebnis) anwende, kommt Beispielsweise 235 raus. Also ist das Ergebnis 235 Zeichen lang. Allerdings werden mir bei echo 'a'.$ergebnis.'b' nur die gefüllten Felder ausgegeben. Wenn kein textcontent vorliegt, kommt nur ein a b raus, egal wie lang der String ist.

    var_dump() ist eine der besten Varianten, sich genau zu informieren, was vorliegt. Dann braucht man auch keine a-b-Krücken. Was man allerdings immer beachten muss ist der Ausgabekontext. Wenn man sich XML-Code in einer HTML-Umgebung ansehen will, braucht es htmlspecialchars() oder einen Blick in die Quellcode-Ansicht des Browsers.

    235 ist auch nicht die Anzahl der Zeichen sondern die der Bytes. strlen() arbeitet nach dem Prinzip "1 Byte muss ein Zeichen sein", XML-Funktionen hantieren jedoch üblicherweise mit UTF-8.

    Nun möchte ich aber per if($ergebnis == ' ') abfragen ob in allen Knoten nichts drin steht, läuft aber nicht. Wie kann abfragen, ob kein Ergnis gefunden wurde?

    Erst mal analysieren, was wirklich vorliegt: var_dump()

    Lo!

    1. Danke, jetzt bin ich schlauer.

      Leider hab ich ein weiters Problem:
      ich habe ein xml-file welches mehrere Verschachtelungsebenen hat.
      Nun möchte ich per PHP DOM jedes leere Element löschen. Auch die, die durch das Löschen leer werden.

      Wie mach ich das? Eine Methode $node->removeEveryEmptyChild wäre toll!

      Paul

      1. Hi!

        Leider hab ich ein weiters Problem:

        Macht nichts. Davon leben wir hier :-)

        ich habe ein xml-file welches mehrere Verschachtelungsebenen hat.
        Nun möchte ich per PHP DOM jedes leere Element löschen. Auch die, die durch das Löschen leer werden.

        Wenn sich da kein XPath-Audruck finden lässt (da hab ich zu wenig Kenntnisse), den du drüberlaufen lassen kannst, bis er nichts mehr findet, kannst du auch Rekursion verwenden:

        Für jedes Child:
          Rekursion ins Child hinein.
          Ist es leer, löschen.

        Wenn am Ende der Schleife kein Child mehr übrigbleibt, ist das aktuelle Element leer. In die übergeordnete Rekursionsebene zurückgekehrt wird diese Leere geprüft und der Knoten gelöscht.

        Lo!

        1. Hi!

          Hi!

          Vom Prinzip ist mir das klar. Werd mal etwas rumtesten müssen. Danke.