PHP Conference Japan 2024

SimpleXMLElement::asXML

(PHP 5, PHP 7, PHP 8)

SimpleXMLElement::asXML基于 SimpleXML 元素返回格式良好的 XML 字符串

描述

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

asXML 方法以 XML 1.0 版本格式化父对象的 XML 数据。

参数

filename

如果提供了string值,则该函数将数据写入文件,而不是返回它。

返回值

如果未指定filename,则此函数在成功时返回string,在错误时返回false。如果指定了参数,则如果文件写入成功则返回true,否则返回false

变更日志

版本 描述
8.0.0 filename 现在可以为空。

示例

示例 #1 获取 XML

<?php
$string
= <<<XML
<a>
<b>
<c>text</c>
<c>stuff</c>
</b>
<d>
<c>code</c>
</d>
</a>
XML;

$xml = new SimpleXMLElement($string);

echo
$xml->asXML();

?>

以上示例将输出

<?xml version="1.0"?>
<a>
 <b>
  <c>text</c>
  <c>stuff</c>
 </b>
 <d>
  <c>code</c>
 </d>
</a>

asXML 也适用于 XPath 结果

示例 #2 在 SimpleXMLElement::xpath() 结果上使用 asXML()

<?php
// 延续上面的 XML 示例。

/* 搜索 <a><b><c> */
$result = $xml->xpath('/a/b/c');

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

以上示例将输出

<c>text</c><c>stuff</c>

添加注释

用户贡献的注释 2 条注释

33
andreas dot theissen at t-online dot de
12 年前
为了防止 asXML 无意中对元音进行编码,只需提前使用具有适当编码的 XML 头即可。

如果您这样做,asXML 将愉快地完全保留您的元音(以及头)。

<?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 和 $output 现在相同。

随后使用 html_entity_decode()(如在另一篇文章开头建议的那样)有几个缺点

1. 速度慢
2. 占用资源多
3. 例如,如果您的源代码中已经存在编码的尖括号或双引号(如上述示例所示),则标记将被破坏。
9
oleg dot pavlin at gmail dot com
12 年前
函数 asXML 将特殊字符(如 ø、æ 等)解码为 &#xE6;、&#xF8;。

要获取正常输出,请使用不带引号的

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