为什么不直接
simplexml_import_dom(dom_import_simplexml($SimpleXmlNode))
(PHP 5, PHP 7, PHP 8)
simplexml_import_dom — 从 DOM 节点获取 SimpleXMLElement
对象
$node
, ?string $class_name
= SimpleXMLElement::class): ?SimpleXMLElement此函数获取 DOM 文档的节点并将其转换为 SimpleXML 节点。此新对象随后可以用作本机 SimpleXML 元素。
返回 SimpleXMLElement,或在失败时返回 null
。
示例 #1 导入 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
为什么不直接
simplexml_import_dom(dom_import_simplexml($SimpleXmlNode))
/*如果 DOM 中的标签有文本,并且文本的某些部分被其他标签包围,simple_import_dom 对象不包含子标签的位置,因此将其渲染回 html/xml 可能有问题。打印这样的节点也很奇怪。例如*/
//////////////////////
$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;
//////////////////////
//打印
//Some text before and after text.
print_r($result->p);
//打印
//SimpleXMLElement Object ( [em] => italic )
print_r($result->p->em)
//或多或少一样
//SimpleXMLElement Object ( [0] => italic )
var_dump($result->p);
//打印
//object(SimpleXMLElement)#8 (1) { ["em"]=> string(7) "italic " }
var_dump($result->p->em)
//object(SimpleXMLElement)#9 (1) { [0]=> string(7) "italic " }
//但是
echo $result->p->em;
//打印
//italic
simplexml_import_dom() 可以接受 DOM 节点或其他 SimpleXMLElements。如果您正在扩展 SimpleXMLElement 类,并且希望 xpath() 方法返回您的类扩展而不是基本 SimpleXMLElements,这将非常有用。例如
class MySimpleXML extends SimpleXMLElement{
public function xpath($xpath){
$return = array();
$simpleXmls = parent::xpath($xpath); // 运行 SimpleXMLElement xpath,返回 SimpleXMLElements 数组
foreach($simpleXmls as $xml){
$return[] = simplexml_import_dom($xml,'MySimpleXML'); // 复制 SimpleXMLElement,作为 MySimpleXML 实例返回
}
return $return;
}
}
现在我可以创建一个 MySimpleXML 的实例,运行 xpath,并将结果作为 MySimpleXML 元素数组返回,而不是本机 SimpleXMLElement
$mySimpleXml = new mySimpleXml('<root><node/></root>');
$array = $mySimpleXml->xpath('/root/node'); // 返回一个包含单个 MySimpleXml 对象的数组