2024 年 PHP Conference Japan

SimpleXMLElement::asXML

(PHP 5, PHP 7, PHP 8)

SimpleXMLElement::asXML 根據 SimpleXML 元素返回格式良好的 XML 字串

說明

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

asXML 方法將父物件的資料格式化為 XML 1.0 版本。

參數

filename

如果提供了 字串 值,則此函式會將資料寫入檔案,而不是返回資料。

返回值

如果未指定 filename 參數,則此函式在成功時返回 字串,在錯誤時返回 false。如果指定了此參數,則在檔案成功寫入時返回 true,否則返回 false

更新日誌

版本 說明
8.0.0 filename 現在可以為 null。

範例

範例 #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 則註釋

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. 例如,如果您的來源中已經存在編碼的角括號或雙引號(如上例所示),標記將會損壞。
oleg dot pavlin at gmail dot com
12 年前
`asXML` 函式會將特殊字元,例如 ø、æ 等解碼為 `&#xE6;`、`&#xF8;`

要獲得正常的輸出,請使用不帶引號的方式

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