simplexml_import_dom

(PHP 5, PHP 7, PHP 8)

simplexml_import_domGet a SimpleXMLElement object from an XML or HTML node

Descrizione

simplexml_import_dom(object $node, ?string $class_name = SimpleXMLElement::class): ?SimpleXMLElement

This function takes a node of a DOM document and makes it into a SimpleXML node. This new object can then be used as a native SimpleXML element.

Elenco dei parametri

node

A DOM Element node

class_name

You may use this optional parameter so that simplexml_import_dom() will return an object of the specified class. That class should extend the SimpleXMLElement class.

Valori restituiti

Returns a SimpleXMLElement or null on failure.

Errori/Eccezioni

Throws a TypeError when passed a non-XML or non-HTML node.

Log delle modifiche

Versione Descrizione
8.4.0 Added support for Dom\Document.
8.4.0 This function now throws a TypeError instead of a ValueError when passed a non-XML or non-HTML node.

Esempi

Example #1 Importing a DOMDocument

<?php
$dom
= new DOMDocument;
$dom->loadXML('<books><book><title>blah</title></book></books>');
if (!
$dom) {
echo
'Error while parsing the document';
exit;
}

$s = simplexml_import_dom($dom);

echo
$s->book[0]->title;
?>

Il precedente esempio visualizzerà:

blah

Example #2 Importing a Dom\Document

<?php
$dom
= Dom\XMLDocument::createFromString('<books><book><title>blah</title></book></books>');

$s = simplexml_import_dom($dom);

echo
$s->book[0]->title;
?>

Il precedente esempio visualizzerà:

blah

Vedere anche:

add a note

User Contributed Notes 3 notes

up
-1
paul dot allsopp at digital-pig dot com
2 years ago
Why not just:simplexml_import_dom(dom_import_simplexml($SimpleXmlNode))
up
-2
shirkaen at gmail dot com
8 years ago
/*If tags in DOM have text and some part of this text is surrounded by other tag, simple_import_dom object doesn't contain position of child tag, so rendering it back to html/xml can be a problem. Printing such a node is also peculiar. Eg.*///////////////////////$text = "<body><p>Some text before <em>italic </em>and after text.</p></body>";$dom = new DOMDocument;$dom->loadHTML($text);$result = simplexml_import_dom($dom);echo $result->p;////////////////////////Prints ://Some text before and after text.print_r($result->p);//Prints://SimpleXMLElement Object ( [em] => italic )print_r($result->p->em)//does more or less the same://SimpleXMLElement Object ( [0] => italic )var_dump($result->p);//Prints://object(SimpleXMLElement)#8 (1) { ["em"]=> string(7) "italic " }var_dump($result->p->em)//object(SimpleXMLElement)#9 (1) { [0]=> string(7) "italic " }//butecho $result->p->em;//prints://italic
up
-3
brandonkirsch at perceptionilluminates dot com
11 years ago
simplexml_import_dom() will accept DOMNodes or other SimpleXMLElements.  This has a useful purpose if you are extending the SimpleXMLElement class and would prefer the xpath() method to return your class extension instead of basic SimpleXMLElements.  For example:class MySimpleXML extends SimpleXMLElement{    public function xpath($xpath){         $return = array();        $simpleXmls = parent::xpath($xpath); // run SimpleXMLElement xpath, returning an array of SimpleXMLElements        foreach($simpleXmls as $xml){            $return[] = simplexml_import_dom($xml,'MySimpleXML'); // copy SimpleXMLElement, returning as MySimpleXML instance        }        return $return;    }}Now I can create an instance of MySimpleXML, run an xpath, and get my results back as an array of MySimpleXML elements instead of the native SimpleXMLElement:$mySimpleXml = new mySimpleXml('<root><node/></root>');$array = $mySimpleXml->xpath('/root/node'); // returns array with a single MySimpleXml object
To Top