ConFoo 2025

SimpleXMLElement::asXML

(PHP 5, PHP 7, PHP 8)

SimpleXMLElement::asXML Возвращает сформированный XML-документ в виде строки на основе элемента SimpleXML

Описание

public SimpleXMLElement::asXML(?string $filename = null): string|bool

Метод asXML задаёт формат данных родительских объектов в версии XML 1.0.

Список параметров

filename

Если указано значение в виде строки (string), то функция запишет данные в файл, а не вернёт их.

Возвращаемые значения

Если filename не указан, то функция вернёт строку (string) в случае успешного выполнения и false в случае возникновения ошибки. Если параметр указан, то функция вернёт true, если файл будет успешно записан и false в противном случае.

Список изменений

Версия Описание
8.0.0 filename теперь допускает значение null.

Примеры

Пример #1 Получение XML

<?php
$string
= <<<XML
<a>
<b>
<c>текст</c>
<c>штучка</c>
</b>
<d>
<c>код</c>
</d>
</a>
XML;

$xml = new SimpleXMLElement($string);

echo
$xml->asXML();

?>

Результат выполнения приведённого примера:

<?xml version="1.0"?>
<a>
 <b>
  <c>текст</c>
  <c>штучка</c>
 </b>
 <d>
  <c>код</c>
 </d>
</a>

asXML также работает с результатами Xpath:

Пример #2 Использование asXML() с результатами SimpleXMLElement::xpath()

<?php
// Продолжение примера XML выше.

/* Поиск <a><b><c> */
$result = $xml->xpath('/a/b/c');

foreach (
$result as $node) {
echo
$node->asXML();
}
?>

Результат выполнения приведённого примера:

<c>текст</c><c>штучка</c>

Смотрите также

Добавить

Примечания пользователей 2 notes

up
33
andreas dot theissen at t-online dot de
12 years ago
To prevent asXML from encoding vowels unwantedly, simply use an approriate XML header with encoding in advance.

If you do so, asXML will happily leave your vowels (and the header) entirely untouched.

<?php

$xmlstr
=
'<?xml version="1.0" encoding="UTF-8"?>
<keys>
<key lang="en">&lt;Insert&gt;</key>
<key lang="de">&lt;Einfügen&gt;</key>
</keys>'
;

$sxe = new SimpleXMLElement($xmlstr);

$output = $sxe->asXML();

?>

$xmlstr and $output are identical now.

The subsequent use of html_entity_decode() (as proposed in the very beginning in another post) has several drawbacks:

1. It is slow
2. It is expensive
3. If there are already encoded arrow brackets or double quotes in your source for instance (as shown in the above example), markup will be broken.
up
9
oleg dot pavlin at gmail dot com
12 years ago
Function asXML decodes special chars like ø, æ and others to &#xE6;, &#xF8;

To get normal output use without quoting:

$xml = html_entity_decode($xml, ENT_NOQUOTES, 'UTF-8');
To Top