SimpleXMLElement::asXML

(PHP 5, PHP 7, PHP 8)

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

描述

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

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

参数

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
11 年前
为了防止 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