Something that surprised me, any changes made to the SimpleXML object obtained from the imported DOMDocument also change the original DOMDocument.
e.g.
<?php
$string = '<root><foo>abc</foo></root>';
$domxml = DOMDocument::loadXML($string);
$simplexml = simplexml_import_dom($domxml);
$simplexml->foo = "xyz";
$simplexml->bar = "123";
echo $domxml->saveXML();
?>
Outputs:
--START--
<?xml version="1.0"?>
<root><foo>xyz</foo><bar>123</bar></root>
simplexml_import_dom
(PHP 5)
simplexml_import_dom — Construit un objet SimpleXMLElement à partir d'une node DOM
Description
Cette fonction prend une node d'un document DOM et la transforme en node SimpleXML. Ce nouvel objet peut alors être utilisé comme un élément natif SimpleXML.
Liste de paramètres
- node
-
Un élément DOM
- class_name
-
Vous pouvez utiliser ce paramètre optionnel afin que simplexml_load_string() retourne un objet de la classe spécifiée. Cette classe doit étendre la classe SimpleXMLElement.
Valeurs de retour
Retourne un SimpleXMLElement ou FALSE si une erreur survient.
Exemples
Exemple #1 Import DOM
<?php
$dom = new DOMDocument;
$dom->loadXML('<books><book><title>blah</title></book></books>');
if (!$dom) {
echo 'Erreur durant l'analyse du document;
exit;
}
$s = simplexml_import_dom($dom);
echo $s->book[0]->title; // blah
?>
simplexml_import_dom
peter-SPAMrubbish-ATveridon.com
05-Mar-2008 11:06
05-Mar-2008 11:06
spam AT media MINUS soma DOT de
26-Jul-2006 09:27
26-Jul-2006 09:27
Please note that a valid SimpleXMLElement is typecasted to false.
<?php
$string = '<root><foo>abc</foo></root>';
$xml = DOMDocument::loadXML($string);
$xml = simplexml_import_dom($xml);
echo 'simplexml_import_dom';
var_dump($xml);
var_dump((bool)$xml);
$xml = simplexml_load_string('<root><foo>abc</foo></root>');
echo 'simplexml_load_string';
var_dump($xml);
var_dump((bool)$xml);
$xml = simplexml_load_file('test.xml');
echo 'simplexml_load_file';
var_dump($xml);
var_dump((bool)$xml);
?>
Outputs:
--START--
simplexml_import_dom
object(SimpleXMLElement)[2]
public 'foo' => 'abc'
false
simplexml_load_string
object(SimpleXMLElement)[1]
public 'foo' => 'abc'
false
simplexml_load_file
object(SimpleXMLElement)[2]
public 'foo' => 'abc'
false
--END--
