Function asXML decodes special chars like ø, æ and others to æ, ø
To get normal output use without quoting:
$xml = html_entity_decode($xml, ENT_NOQUOTES, 'UTF-8');
SimpleXMLElement::asXML
(PHP 5 >= 5.0.1)
SimpleXMLElement::asXML — Retorna un string XML correcto basado en un elemento SimpleXML
Descripción
El método asXML formatea los datos del objeto padre en XML versión 1.0.
Parámetros
-
filename -
Si se especifica, la función escribe los datos al fichero en vez de retornarlo.
Valores devueltos
Si no se especifica filename, esta función retorna
un string si no hay errores y FALSE si lo hay. Si se
especifica el parámetro, retorna TRUE si el fichero se escribió
correctamente y FALSE en caso contrario.
Ejemplos
Ejemplo #1 Retornar XML
<?php
$string = <<<XML
<a>
<b>
<c>texto</c>
<c>cosas</c>
</b>
<d>
<c>codigo</c>
</d>
</a>
XML;
$xml = new SimpleXMLElement($string);
echo $xml->asXML();
?>
El resultado del ejemplo sería:
<?xml version="1.0"?> <a> <b> <c>texto</c> <c>cosas</c> </b> <d> <c>codigo</c> </d> </a>
asXML también trabaja con resultados Xpath:
Ejemplo #2 Usando asXML() en resultados SimpleXMLElement::xpath()
<?php
// Continuación del ejemplo XML anterior.
/* Buscar <a><b><c> */
$resultado = $xml->xpath('/a/b/c');
while(list( , $nodo) = each($resultado)) {
echo $nodo->asXML(); // <c>texto</c> and <c>cosas</c>
}
?>
El resultado del ejemplo sería:
<c>texto</c><c>cosas</c>
oleg dot pavlin at gmail dot com ¶
1 year ago
andreas dot theissen at t-online dot de ¶
6 months 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"><Insert></key>
<key lang="de"><Einfügen></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.
jcr at di dot uminho dot pt ¶
2 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");
?>
