saveXML()
SimpleXMLElement::saveXML() в PHP — метод сериализации XML-объекта в строку или файл. Синтаксис, примеры и советы по форматированию.
Введение
SimpleXML — это расширение PHP, предоставляющее простой и удобный API для работы с XML-документами. Метод SimpleXMLElement::saveXML() является стандартным способом преобразования объекта SimpleXMLElement обратно в XML — либо в виде строки в памяти, либо в виде файла на диске.
Обычно saveXML() используют в конце рабочего процесса: после загрузки XML (с помощью simplexml_load_string()) или построения дерева узел за узлом (с помощью addChild()) saveXML() сериализует результат, чтобы его можно было вернуть, сохранить или передать по сети.
В этой статье рассматриваются сигнатура метода, его отличие от asXML() и практические примеры, включая форматированный вывод.
Синтаксис
public SimpleXMLElement::saveXML(?string $filename = null): string|false$filename— Необязательный. Если указан, XML записывается в этот файл, и метод возвращаетtrueпри успехе илиfalseпри ошибке. Целевой каталог должен уже существовать и быть доступен для записи процессом PHP. Если аргумент опущен (по умолчанию), метод возвращает XML в виде строки вместо записи в файл.- Возвращаемое значение —
string, содержащая сериализованный XML, когда$filenameопущен;bool, указывающий на успех, когда$filenameзадан. Возвращаетfalseтолько при ошибке.
SimpleXMLElement::saveXML()является псевдонимомSimpleXMLElement::asXML()— оба метода взаимозаменяемы и принимают один необязательный аргумент$filename. Обратите внимание, что в отличие отDOMDocument::saveXML(), версия SimpleXML не принимает аргумент$options; его передача вызовет ошибкуArgumentCountError.
Сохранение XML в строку
Вызовите saveXML() без аргументов, чтобы получить документ в виде строки:
Это выводит полный документ, включая XML-декларацию:
<?xml version="1.0"?>
<book><title>PHP Basics</title></book>Мы создаём объект SimpleXMLElement, представляющий элемент book с дочерним элементом title, затем сериализуем всё дерево обратно в строку.
Построение XML перед сохранением
В реальном коде дерево обычно строится динамически с помощью addChild(), а затем сериализуется в конце:
<?php
$catalog = new SimpleXMLElement('<catalog></catalog>');
$book = $catalog->addChild('book');
$book->addChild('title', 'Learn PHP');
$book->addChild('author', 'W3docs');
echo $catalog->saveXML();Вывод:
<?xml version="1.0"?>
<catalog><book><title>Learn PHP</title><author>W3docs</author></book></catalog>Сохранение XML в файл
Передайте имя файла, чтобы записать документ непосредственно на диск. В этом режиме saveXML() возвращает boolean, поэтому проверяйте результат перед тем, как считать запись успешной:
<?php
$xml = new SimpleXMLElement('<book><title>PHP Basics</title></book>');
$success = $xml->saveXML('output.xml');
if ($success) {
echo "XML saved successfully.";
} else {
echo "Failed to save XML.";
}Результат false почти всегда означает проблему с правами доступа или путём — каталог не существует или процесс PHP не может в него писать.
Форматированный вывод
SimpleXML сериализует всё в одну строку и не предоставляет флагов форматирования. Чтобы получить читаемый XML с отступами, передайте строку в DOMDocument, который поддерживает formatOutput:
<?php
$xml = new SimpleXMLElement('<catalog><book><title>Learn PHP</title></book></catalog>');
$dom = new DOMDocument('1.0');
$dom->preserveWhiteSpace = false;
$dom->formatOutput = true;
$dom->loadXML($xml->saveXML());
echo $dom->saveXML();Вывод:
<?xml version="1.0"?>
<catalog>
<book>
<title>Learn PHP</title>
</book>
</catalog>Заключение
SimpleXMLElement::saveXML() — это шаг сериализации в рабочем процессе SimpleXML: он преобразует объект SimpleXMLElement в XML-строку или записывает его в файл с использованием чистого объектно-ориентированного синтаксиса. Помните, что метод принимает только необязательный $filename, является псевдонимом asXML(), а форматированный вывод необходимо получать через DOMDocument. Для построения документов перед сохранением см. addChild(); для ознакомления с более широким API см. обзор SimpleXML.