simplexml_import_dom()
(PHP 5, PHP 7)
Get aSimpleXMLElementobject from a DOM node
说明
simplexml_import_dom(DOMNode$node[,string $class_name= "SimpleXMLElement"]): 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.
参数
- $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.
返回值
Returns a SimpleXMLElement或者在失败时返回FALSE
.
Warning此函数可能返回布尔值
FALSE
,但也可能返回等同于FALSE
的非布尔值。请阅读布尔类型章节以获取更多信息。应使用===运算符来测试此函数的返回值。
范例
Example #1 Importing DOM
<?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; ?>
以上例程会输出:
blah
参见
dom_import_simplexml()
Gets a DOMElement object from a SimpleXMLElement object- Basic SimpleXML usage
/*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 " } //but echo $result->p->em; //prints: //italic
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