W3docs

children()

Erfahren Sie, wie PHP's SimpleXMLElement::children() direkte Kindelemente eines XML-Knotens zurückgibt, mit Namespace-Filterung über $ns und $is_prefix.

Einführung

SimpleXMLElement::children() gibt die direkten Kindelemente eines XML-Knotens als neues SimpleXMLElement zurück. Es ist Teil von PHP's SimpleXML-Erweiterung, dem leichtgewichtigen, objektorientierten Weg zum Lesen und Durchlaufen von XML. Sie verwenden children() immer dann, wenn Sie die direkt in einem Knoten verschachtelten Elemente durchlaufen oder zählen müssen — anstatt auf sie einzeln über den Property-Namen zuzugreifen.

Diese Seite behandelt die Signatur und den Rückgabewert der Methode, wie man Kindelemente iteriert, wie man sie zählt, und den Teil, den die meisten Tutorials überspringen: das Lesen von Kindelementen, die sich in einem XML-Namespace befinden.

Syntax

public SimpleXMLElement::children(?string $namespace = null, bool $isPrefix = false): ?SimpleXMLElement
ParameterBeschreibung
$namespaceOptional. Ein XML-Namespace, nach dem Kindelemente gefiltert werden sollen. Wenn weggelassen, werden Kindelemente im Standard-Namespace des Dokuments zurückgegeben.
$isPrefixOptional. Wenn true, wird $namespace als Namespace-Präfix behandelt (z. B. lib); wenn false (Standard), wird es als Namespace-URI behandelt (z. B. http://example.com/lib).

Rückgabewert: ein SimpleXMLElement, über das Sie mit foreach iterieren, es wie ein array indizieren ($children[0]) oder an count() übergeben können. Es gibt nur null zurück, wenn es auf etwas aufgerufen wird, das kein gültiges Element ist.

children() gibt nur direkte Kindelemente zurück — es steigt nicht in Enkelkinder hinab. Um tiefer liegende Knoten zu erreichen, rufen Sie children() erneut auf einem Kindelement auf oder verwenden Sie XPath.

Über Kindelemente iterieren

Die häufigste Verwendung ist das Durchlaufen aller direkten Kindelemente eines Knotens:

php— editable, runs on the server

Ausgabe:

PHP Basics - John Doe
Mastering XML - Jane Roe

Hier ist $xml der <books>-Wurzelknoten, und children() liefert jedes <book>. Innerhalb der Schleife lesen $book->title und $book->author die Enkelkindwerte aus. Da beide <book>-Elemente denselben Tag-Namen teilen, ist das Durchlaufen der natürliche Weg, um eine wiederholte Struktur zu verarbeiten.

Kindelemente zählen

Das zurückgegebene object funktioniert mit count(), sodass Sie prüfen können, wie viele direkte Kindelemente ein Knoten hat, und auf sie wie ein array indizieren können:

<?php
$xml = new SimpleXMLElement('<menu><item>Tea</item><item>Coffee</item><item>Juice</item></menu>');
$children = $xml->children();

echo "Number of items: ", count($children), "\n";
echo "First item: ", $children[0], "\n";

Ausgabe:

Number of items: 3
First item: Tea

Mit Namespaces arbeiten

Hier kommen die Parameter von children() zum Tragen. Wenn ein Dokument XML-Namespaces verwendet, gibt ein einfacher children()-Aufruf nur Elemente im Standard-Namespace zurück — Elemente mit Präfix werden übersprungen. Um sie zu erreichen, übergeben Sie den Namespace.

<?php
$xml = new SimpleXMLElement(
    '<library xmlns:lib="http://example.com/lib">
        <lib:book>Namespaced Book</lib:book>
        <note>Plain note</note>
    </library>'
);

// No namespace: only children in the default namespace
echo count($xml->children()), " default-namespace child(ren)\n";

// Pass the namespace URI to reach the lib: children
$libChildren = $xml->children('http://example.com/lib');
echo count($libChildren), " lib child(ren): ", trim((string) $libChildren->book), "\n";

// Or pass the prefix with $isPrefix = true
$byPrefix = $xml->children('lib', true);
echo count($byPrefix), " child(ren) by prefix\n";

Ausgabe:

1 default-namespace child(ren)
1 lib child(ren): Namespaced Book
1 child(ren) by prefix

Beachten Sie: das bloße children() findet nur <note>, während children('http://example.com/lib') das <lib:book>-Element findet. Wenn Sie dies vergessen, scheinen Namespace-Daten zu „verschwinden" — ein klassischer SimpleXML-Fallstrick.

Häufige Fallstricke

  • Es werden nur direkte Kindelemente zurückgegeben. Enkelkinder erfordern einen weiteren children()-Aufruf oder XPath.
  • Kindelemente mit Namespace benötigen das Namespace-Argument. Ein einfaches children() ignoriert Elemente mit Präfix stillschweigend.
  • Werte sind Objekte, keine Strings. Wandeln Sie einen Blattknoten in einen string um ((string) $child) oder verketten Sie ihn, bevor Sie ihn als Text behandeln.
  • Attribute sind getrennt. children() gibt verschachtelte Elemente zurück; verwenden Sie attributes(), um die Attribute eines Elements zu lesen.

Fazit

SimpleXMLElement::children() ist der Standardweg, um die direkten Kindelemente eines XML-Knotens in PHP aufzuzählen — ob Sie mit foreach iterieren, mit count() zählen oder über die Parameter $namespace und $isPrefix in einen bestimmten Namespace einsteigen. Kombinieren Sie es mit attributes() und simplexml_load_string(), um reale XML-Dokumente sauber zu parsen.

Übungen

Übung
Was gibt SimpleXMLElement::children() zurück?
Was gibt SimpleXMLElement::children() zurück?
Was this page helpful?