PHP 5.5.16 is released

SimpleXMLElement::asXML

(PHP 5 >= 5.0.1)

SimpleXMLElement::asXML SimpleXML 要素に基づき整形式の XML 文字列を返す

説明

public mixed SimpleXMLElement::asXML ([ string $filename ] )

asXML メソッドは、親オブジェクトのデータを XML version 1.0 形式にフォーマットします。

パラメータ

filename

指定した場合、データを返すかわりにファイルにデータを書き込みます。

返り値

filename が指定されていない場合、この関数は 成功時に string 、エラー時に FALSE を返します。 パラメータが指定されていた場合は、ファイルが正常に書き込めたときに TRUE 、そうでないときに FALSE を返します。

例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');

while(list( , 
$node) = each($result)) {
    echo 
$node->asXML();
}
?>

上の例の出力は以下となります。

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

add a note add a note

User Contributed Notes 3 notes

up
8
andreas dot theissen at t-online dot de
1 year 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
8
oleg dot pavlin at gmail dot com
2 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');
up
-9
jcr at di dot uminho dot pt
3 years ago
Code snippet to load a XML document, increment an attribute and store it again.
My XML looks like:
<?xml version="1.0" encoding="ISO-8859-1"?>
<doctypes counter="16">
    <doctype id="d1">
        <name>Carta</name>
        <acro>CA</acro>
    </doctype>
...
</doctypes>

I want to retrieve the counter attribute, increment it, and store the new document at the end:

<?php
  $document
= simplexml_load_file("mydoc.xml");
 
$cont = (integer) $document['counter'];
 
$document['counter'] = $cont+1;
 
$document->asXML("mydoc.xml");
?>
To Top