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 當傳入非 XML 或非 HTML 的 node 時,此函式現在會拋出 TypeError,而不是 ValueError

範例

範例 #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>一些文字在 <em>斜體 </em>之前和之後。</p></body>";
$dom = new DOMDocument;
$dom->loadHTML($text);
$result = simplexml_import_dom($dom);
echo $result->p;

//////////////////////
//印出
//一些文字在之前和之後。

print_r($result->p);
//印出
//SimpleXMLElement 物件 ( [em] => 斜體 )

print_r($result->p->em)
//作用大致相同
//SimpleXMLElement 物件 ( [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