W3docs

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() без аргументов, чтобы получить документ в виде строки:

php— editable, runs on the server

Это выводит полный документ, включая 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.

Практика

Практика
Какие шаги можно использовать в PHP для создания XML-файла из PHP-объекта?
Какие шаги можно использовать в PHP для создания XML-файла из PHP-объекта?
Was this page helpful?