W3docs

addChild()

Erfahren Sie, wie PHP SimpleXMLElement::addChild() Kindelemente zu einem XML-Dokument hinzufügt – mit Werten, Namespaces, Fallstricken und ausführbaren Beispielen.

Einführung

SimpleXMLElement::addChild() ist die Methode, mit der Sie XML in PHP von Grund auf erstellen, Knoten für Knoten. SimpleXML ist eine integrierte PHP-Erweiterung, die ein XML-Dokument in ein Objekt umwandelt, das Sie mit normaler Eigenschaftssyntax lesen und schreiben können. Während das Lesen so einfach ist wie $xml->book->title, ist das Schreiben eines brandneuen Elements die Aufgabe von addChild().

Diese Seite erklärt, was addChild() zurückgibt und warum das wichtig ist, wie man Werte und Namespaces hinzufügt sowie die Fallstricke, über die man stolpert (Entity-Escaping, Attribute vs. Elemente und die NULL-Wert-Falle). Alle nachfolgenden Beispiele sind ausführbar.

Syntax

public SimpleXMLElement::addChild(
    string $qualifiedName,
    ?string $value = null,
    ?string $namespace = null
): ?SimpleXMLElement
  • $qualifiedName — der Name (Tag) des neuen Kindelements, z. B. "title".
  • $value — optionaler Textinhalt für das Element. Wenn weggelassen oder null, wird ein leeres Element erstellt (<title/>).
  • $namespace — optionale Namespace-URI, zu der das Kindelement gehört.

Der Rückgabewert ist das entscheidende Detail: addChild() gibt das neu erstellte Kindelement zurück, nicht das übergeordnete Element. Dieses zurückgegebene Objekt ist es, auf das Sie weitere Aufrufe verketten, um verschachtelte Strukturen aufzubauen.

Ein einzelnes Kindelement hinzufügen

php— editable, runs on the server

Dies gibt aus:

<?xml version="1.0"?>
<books><book>PHP Basics</book></books>

Wir beginnen mit einem Root-Element <books> und fügen dann ein Kindelement <book> hinzu, dessen Textinhalt PHP Basics ist. asXML() serialisiert das Objekt zurück in einen XML-String.

Eine verschachtelte Struktur aufbauen

Da addChild() das soeben erstellte Kindelement zurückgibt, erfassen Sie diesen Rückgabewert, um weitere Ebenen hinzuzufügen:

<?php

$xml  = new SimpleXMLElement('<books></books>');
$book = $xml->addChild('book');          // returns the <book> element
$book->addChild('title', 'PHP Basics');  // adds <title> inside <book>
$book->addChild('author', 'John Doe');   // adds <author> inside <book>

echo $xml->asXML();

Ausgabe:

<?xml version="1.0"?>
<books><book><title>PHP Basics</title><author>John Doe</author></book></books>

Hätten Sie statt $book->addChild(...) den Aufruf $xml->addChild('title', ...) verwendet, wäre <title> neben <book> gelandet und nicht darin. Das Objekt, auf dem Sie addChild() aufrufen, ist immer das übergeordnete Element.

Kindelemente vs. Attribute

addChild() erstellt nur Elemente. Um ein Attribut hinzuzufügen (z. B. id="1"), verwenden Sie addAttribute() auf demselben Element:

<?php

$xml  = new SimpleXMLElement('<books></books>');
$book = $xml->addChild('book');
$book->addAttribute('id', '1');
$book->addChild('title', 'PHP Basics');

echo $xml->asXML();

Ausgabe:

<?xml version="1.0"?>
<books><book id="1"><title>PHP Basics</title></book></books>

Sonderzeichen: ein echter Fallstrick

Man könnte erwarten, dass addChild() XML-unsichere Zeichen im Wert automatisch escaped. Das tut es nicht vollständig — ein rohes & lässt SimpleXML es als Beginn einer Entity-Referenz behandeln und gibt eine Warnung „unterminated entity reference" aus, wobei der Inhalt verloren geht:

<?php

$xml = new SimpleXMLElement('<docs></docs>');
$xml->addChild('note', 'Tom & Jerry <fun>'); // Warning: unterminated entity reference

echo $xml->asXML();

Dies gibt ein leeres Element aus, nicht den gewünschten Text:

<?xml version="1.0"?>
<docs><note/></docs>

Der zuverlässige Weg, Text mit &, < oder > zu setzen, ist die Eigenschaftszuweisung, die korrekt escaped:

<?php

$xml = new SimpleXMLElement('<docs></docs>');
$xml->note = 'Tom & Jerry <fun>';

echo $xml->asXML();

Ausgabe:

<?xml version="1.0"?>
<docs><note>Tom &amp; Jerry &lt;fun&gt;</note></docs>

Also: Verwenden Sie addChild() zum Erstellen des Elements, aber weisen Sie nicht vertrauenswürdigen Text mit Sonderzeichen über die Eigenschaft zu (oder escapen Sie ihn vorab mit htmlspecialchars()).

Kindelemente mit Namespaces hinzufügen

Das dritte Argument verknüpft das Kindelement mit einer Namespace-URI:

<?php

$xml = new SimpleXMLElement('<feed xmlns:dc="http://purl.org/dc/elements/1.1/"></feed>');
$xml->addChild('creator', 'Jane Roe', 'http://purl.org/dc/elements/1.1/');

echo $xml->asXML();

Ausgabe:

<?xml version="1.0"?>
<feed xmlns:dc="http://purl.org/dc/elements/1.1/"><dc:creator>Jane Roe</dc:creator></feed>

Häufige Fallstricke

  • Den Rückgabewert beim Verschachteln nicht ignorieren. addChild() gibt das neue Kindelement zurück; verketten Sie auf diesem, nicht auf dem Root-Element, sonst landen Ihre Elemente auf derselben Ebene.
  • null vs. leerer string. addChild('tag') und addChild('tag', null) erstellen beide ein leeres selbstschließendes Element (<tag/>). Übergeben Sie '' für einen leeren, aber vorhandenen Textknoten.
  • Werte werden nicht sicher escaped. Ein rohes & im Wert löst eine Entity-Referenz-Warnung aus und der Text geht verloren; weisen Sie Sonderzeichen über die Eigenschaft zu ($el->tag = $text;) oder escapen Sie sie vorab. Elementnamen müssen gültige XML-Bezeichner sein.
  • Es verändert das Objekt direkt. addChild() ändert das Dokument, das das Objekt kapselt; es gibt keinen separaten „Speichern"-Schritt außer der Serialisierung mit asXML().

Wann man es verwendet

Greifen Sie zu addChild(), wenn Sie XML generieren müssen — beim Erstellen eines RSS/Atom-Feeds, einer Sitemap, einer Konfigurationsdatei oder einer API-Nutzlast — und Sie bereits die leichtgewichtige Objektsyntax von SimpleXML mögen. Zum Parsen von bestehendem XML beginnen Sie typischerweise mit simplexml_load_string() oder simplexml_load_file() und lesen dann mit children(). Für Dokumente, die umfangreiche Bearbeitung erfordern (Verschieben/Entfernen von Knoten), ist die DOM-Erweiterung besser geeignet.

Fazit

SimpleXMLElement::addChild() fügt einem XML-Knoten ein Kindelement hinzu und gibt dieses neue Kindelement zurück, sodass Sie verschachtelte Bäume fließend aufbauen können. Merken Sie sich die Grundlagen: Es gibt das Kindelement zurück, rohe Sonderzeichen im Wert erfordern eine Eigenschaftszuweisung oder vorheriges Escaping, Attribute benötigen addAttribute(), und das optionale dritte Argument platziert das Kindelement in einem Namespace. Unter PHP SimpleXML finden Sie einen umfassenderen Überblick über die Arbeit mit XML in PHP.

Übungen

Übung
Was ist laut den Informationen auf der angegebenen Webseite über die Funktion addChild() in PHP zutreffend?
Was ist laut den Informationen auf der angegebenen Webseite über die Funktion addChild() in PHP zutreffend?
Was this page helpful?