文字

dom_import_simplexml

(PHP 5, PHP 7)

dom_import_simplexml Gets a DOMElement object from a SimpleXMLElement object

说明

DOMElement dom_import_simplexml ( SimpleXMLElement $node )

This function takes the node node of class SimpleXML and makes it into a DOMElement node. This new object can then be used as a native DOMElement node.

参数

node

The SimpleXMLElement node.

返回值

The DOMElement node added or FALSE if any errors occur.

范例

Example #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 ();

?>

参见

  • simplexml_import_dom() - Get a SimpleXMLElement object from a DOM node.

用户评论:

[#1] Jeff M [2009-03-06 01:09:54]

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!

[#2] crescentfreshpot at yahoo dot com [2007-12-12 12:22:45]

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;
?>

[#3] justinpatrin at php dot net [2006-06-01 21:44:19]

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($domnodetrue);
$dom->appendChild($domnode);
?>


Switching back, though, is, well...simple.

<?php
//$dom is a DOMDocument instance
$xml simplexml_import_dom($dom);
?>

上一篇: 下一篇: