W3docs

asXML()

Erfahren Sie, wie PHP's SimpleXMLElement::asXML() XML als String zurückgibt oder in eine Datei schreibt, mit Beispielen und häufigen Fallstricken.

Einführung

SimpleXMLElement::asXML() ist die Methode, die Sie aufrufen, wenn Sie mit SimpleXML fertig sind, XML aufzubauen oder zu bearbeiten, und das Ergebnis zurück erhalten möchten - entweder als string, den Sie ausgeben, zurückgeben oder speichern können, oder direkt in eine Datei geschrieben. Sie ist im Wesentlichen das Gegenteil von simplexml_load_string(): Während das Laden XML-Text in ein navigierbares object verwandelt, wandelt asXML() dieses object zurück in XML-Text um.

Diese Seite behandelt die zwei Modi, in denen die Methode arbeitet, was sie zurückgibt, wie sie sich bei einem einzelnen Knoten im Vergleich zum gesamten Dokument verhält, sowie die Fallstricke, die häufig zu Problemen führen (kein Pretty-Printing, keine XML-Deklaration bei Unterknoten).

Syntax

// Mode 1: return the XML as a string
public SimpleXMLElement::asXML(): string|false

// Mode 2: write the XML to a file, return true/false
public SimpleXMLElement::asXML(string $filename): bool
  • $filename (optional) - Wenn angegeben, wird das XML in diesen Pfad geschrieben und die Methode gibt bei Erfolg true oder bei Fehler false zurück. Wenn weggelassen, wird das XML stattdessen als string zurückgegeben.

asXML() und saveXML() sind Aliase - sie tun genau dasselbe.

XML als String zurückgeben

Rufen Sie asXML() ohne Argument auf, um das Dokument als string zu erhalten. Dies ist die häufigste Verwendung - serialisieren und dann ausgeben, protokollieren oder als HTTP-Antwort-Body senden.

php— editable, runs on the server

Ausgabe:

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

Wir bauen den Baum mit addChild() auf, dann serialisiert asXML() das Ganze. Beachten Sie, dass die Ausgabe in einer einzelnen Zeile steht - SimpleXML rückt nicht ein und gibt keine formatierte Ausgabe aus. Weitere Informationen finden Sie unter Fallstricke weiter unten.

asXML() auf einem einzelnen Knoten aufrufen

asXML() funktioniert auf jedem Element, nicht nur auf dem Dokumentstamm. Wenn es auf einem Kindknoten aufgerufen wird, serialisiert es nur diesen Knoten und seine Nachkommen - und wichtig: Es lässt die <?xml ... ?>-Deklaration weg, da ein Fragment kein eigenständiges Dokument ist.

<?php

$xml = new SimpleXMLElement(
    '<books><book><title>PHP Basics</title></book></books>'
);

// Whole document - includes the XML declaration
echo $xml->asXML(), "\n";

// A single node - no declaration, just the fragment
echo $xml->book->title->asXML(), "\n";

Ausgabe:

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

Damit eignet sich asXML() gut zum Extrahieren eines einzelnen Zweigs eines größeren Dokuments als eigenständiges Snippet.

XML in eine Datei schreiben

Übergeben Sie einen Dateinamen und asXML() schreibt das Dokument dort hin, anstatt einen string zurückzugeben. Der Rückgabewert ist ein boolean, den Sie überprüfen sollten, da das Schreiben fehlschlagen kann (falscher Pfad, keine Berechtigung, volle Festplatte).

<?php

$xml = new SimpleXMLElement('<config><host>localhost</host></config>');

if ($xml->asXML('config.xml')) {
    echo "Saved successfully\n";
} else {
    echo "Failed to write file\n";
}

Wenn ein Dateiname angegeben wird, gibt asXML() true zurück (nicht den XML-string), versuchen Sie also nicht, dessen Ergebnis mit der Erwartung des Markups auszugeben.

Fallstricke

  • Kein Pretty-Printing. asXML() gibt kompaktes, einzeiliges XML aus. Um es einzurücken, übergeben Sie den string an DOM:

    <?php
    
    $xml = new SimpleXMLElement('<a><b>hi</b></a>');
    
    $dom = new DOMDocument('1.0');
    $dom->preserveWhiteSpace = false;
    $dom->formatOutput = true;
    $dom->loadXML($xml->asXML());
    
    echo $dom->saveXML();

    Ausgabe:

    <?xml version="1.0"?>
    <a>
      <b>hi</b>
    </a>
  • Die Ausgabe von Unterknoten enthält keine XML-Deklaration - nur der Dokumentstamm erzeugt die <?xml ... ?>-Zeile.

  • false bedeutet Fehler. Beim Schreiben in eine Datei sollten Sie immer den boolean-Rückgabewert prüfen, anstatt Erfolg vorauszusetzen.

Verwandte Themen

Fazit

SimpleXMLElement::asXML() serialisiert ein SimpleXML-object zurück in XML-Text. Ohne Argument gibt es das Markup als string zurück; mit einem Dateinamen schreibt es das Dokument auf die Festplatte und gibt einen boolean zurück. Denken Sie daran, dass es kompakte Ausgabe erzeugt (verwenden Sie DOM, wenn Sie Einrückung benötigen), und dass der Aufruf auf einem Kindknoten ein Fragment ohne Deklaration liefert.

Übungen

Übung
Was ist der Zweck der Funktion asXML() in PHP?
Was ist der Zweck der Funktion asXML() in PHP?
Was this page helpful?