PHP Conference Japan 2024

simplexml_import_dom

(PHP 5、PHP 7、PHP 8)

simplexml_import_dom从 XML 或 HTML 节点获取 SimpleXMLElement 对象

描述

simplexml_import_dom(对象 $node, ?字符串 $class_name = SimpleXMLElement::class): ?SimpleXMLElement

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

参数

node

一个 DOM 元素节点

class_name

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

返回值

返回一个 SimpleXMLElement 或在失败时返回 null

错误/异常

当传递非 XML 或非 HTML node 时,会抛出 TypeError

更改日志

版本 描述
8.4.0 此函数现在抛出 TypeError 而不是 ValueError,当传递非 XML 或非 HTML node 时。

示例

示例 #1 导入 DOM

<?php
$dom
= new DOMDocument;
$dom->loadXML('<books><book><title>blah</title></book></books>');
if (!
$dom) {
echo
'解析文档时出错';
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
8 年前
/*如果 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() 将接受 DOMNodes 或其他 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