justinpatrin at php dot net:
> To get a proper DOM document (which you need to do most things) you need...
No you don't. Just do: 
<?php
$dom = dom_import_simplexml($xml)->ownerDocument;
?>(PHP 5, PHP 7, PHP 8)
dom_import_simplexml — Gets a DOMAttr or DOMElement object from a SimpleXMLElement object
   This function takes the given attribute or element node (a
   SimpleXMLElement instance) and creates a
   DOMAttr or DOMElement node, repectively.
   The new DOMNode refers to the same underlying XML node
   as the SimpleXMLElement.
  
The DOMAttr or DOMElement.
| 版本 | 说明 | 
|---|---|
| 8.0.0 | This function no longer returns nullon failure. | 
示例 #1 Import SimpleXML into DOM with dom_import_simplexml()
<?php
$sxe = simplexml_load_string('<books><book><title>blah</title></book></books>');
if ($sxe === false) {
    echo 'Error while parsing the document';
    exit;
}
$dom_sxe = dom_import_simplexml($sxe);
if (!$dom_sxe) {
    echo 'Error while converting XML';
    exit;
}
$dom = new DOMDocument('1.0');
$dom_sxe = $dom->importNode($dom_sxe, true);
$dom_sxe = $dom->appendChild($dom_sxe);
echo $dom->saveXML();
?>以上示例会输出:
<?xml version="1.0"?> <books><book><title>blah</title></book></books>
示例 #2 Import SimpleXML into DOM and modify SimpleXML through DOM
Error handling omitted for brevity.
<?php
$sxe = simplexml_load_string('<books><book><title>blah</title></book></books>');
$elt = dom_import_simplexml($sxe);
$elt->setAttribute("foo", "bar");
echo $sxe->asXML();
?>以上示例会输出:
<?xml version="1.0"?> <books foo="bar"><book><title>blah</title></book></books>
justinpatrin at php dot net:
> To get a proper DOM document (which you need to do most things) you need...
No you don't. Just do: 
<?php
$dom = dom_import_simplexml($xml)->ownerDocument;
?>//No need to initiate, import and append on example#1
(...)
$dom_sxe = dom_import_simplexml($sxe);
if (!$dom_sxe) {
    echo 'Erreur lors de la conversion du XML';
    exit;
}
//$dom = new DOMDocument('1.0');
//$dom_sxe = $dom->importNode($dom_sxe, true);
//$dom_sxe = $dom->appendChild($dom_sxe);
//use ownerDocument propertie 
echo $dom->ownerDocument->saveXML();
?>SimpleXML is an 'Object Mapping XML API'. It is not DOM, per se. SimpleXML converts the XML elements into PHP's native data types.
The dom_import_simplexml and simplexml_import_dom functions do *not* create separate copies of the original object. You are free to use the methods of either or both interchangeably, since the underlying instance is the same.
<?php
    // initialize a simplexml object
    $sxe = simplexml_load_string('<root/>');
    
    // get a dom interface on the simplexml object
    $dom = dom_import_simplexml($sxe);
    // dom adds a new element under the root
    $element = $dom->appendChild(new DOMElement('dom_element'));
    
    // dom adds an attribute on the new element
    $element->setAttribute('creator', 'dom');
    // simplexml adds an attribute on the dom element
    $sxe->dom_element['sxe_attribute'] = 'added by simplexml';
    // simplexml adds a new element under the root
    $element = $sxe->addChild('sxe_element');
    
    // simplexml adds an attribute on the new element
    $element['creator'] = 'simplexml';
    // dom finds the simplexml element (via DOMNodeList->index)
    $element = $dom->getElementsByTagName('sxe_element')->item(0);
    // dom adds an attribute on the simplexml element
    $element->setAttribute('dom_attribute', 'added by dom');
    
    echo ('<pre>');            
    print_r($sxe);
    echo ('</pre>');
?>
Outputs:
SimpleXMLElement Object
(
    [dom_element] => SimpleXMLElement Object
        (
            [@attributes] => Array
                (
                    [creator] => dom
                    [sxe_attribute] => added by simplexml
                )
        )
    [sxe_element] => SimpleXMLElement Object
        (
            [@attributes] => Array
                (
                    [creator] => simplexml
                    [dom_attribute] => added by dom
                )
        )
)
What this illustrates is that both interfaces are operating on the same underlying object instance. Also, when you dom_import_simplexml, you can create and add new elements without reference to an ownerDocument (or documentElement).
So passing a SimpleXMLElement to another method does not mean the recipient is limited to using SimpleXML methods.
 
Hey Presto! Your telescope has become a pair of binoculars!I've found that newer versions of PHP5 require some special syntax in order to properly convert between SimpleXML and DOM. It's not as easy as calling dom_import_simplexml() with a SimpleXML node. To get a proper DOM document (which you need to do most things) you need:
<?php
//$xml is a SimpleXML instance
$domnode = dom_import_simplexml($xml);
$dom = new DOMDocument();
$domnode = $dom->importNode($domnode, true);
$dom->appendChild($domnode);
?>
Switching back, though, is, well...simple.
<?php
//$dom is a DOMDocument instance
$xml = simplexml_import_dom($dom);
?>Very useful to add a CDATA node with SimpleXMLElement (use it like addChild) :
<?php
class My_SimpleXMLElement extends SimpleXMLElement {
    
    public function addChildWithCData($name, $value = NULL) {
        $new_child = $this->addChild($name);
        
        $node = dom_import_simplexml($new_child); 
        $no = $node->ownerDocument; 
        $node->appendChild($no->createCDATASection($value)); 
    
        return $new_child;
    }
}