simplexml_import_dom

(PHP 5, PHP 7, PHP 8)

simplexml_import_dom从 DOM 节点获取 SimpleXMLElement 对象

说明

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

此函数获取 DOM 文档的节点并将其转换为 SimpleXML 节点。此新对象随后可以用作本机 SimpleXML 元素。

参数

node

DOM 元素节点

class_name

您可以使用此可选参数,以便 simplexml_import_dom() 返回指定类的对象。该类应扩展 SimpleXMLElement 类。

返回值

返回 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

参见

添加说明

用户贡献的说明 3 个说明

paul dot allsopp at digital-pig dot com
1 年前
为什么不直接
simplexml_import_dom(dom_import_simplexml($SimpleXmlNode))
shirkaen at gmail dot com
7 年前
/*如果 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
brandonkirsch at perceptionilluminates dot com
11 年前
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 对象的数组
To Top