PHP 8.4.2 Released!

simplexml_import_dom

(PHP 5, PHP 7, PHP 8)

simplexml_import_dom Получает объект класса SimpleXMLElement из узла XML или HTML

Описание

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

Функция берет узел документа DOM и превращает его в узел SimpleXML. Затем этот новый объект может быть использован как первичный элемент SimpleXML.

Список параметров

node

Узел-элемент DOM

class_name

Разрешается использовать этот дополнительный параметр, чтобы функция simplexml_import_dom() возвращала объект заданного класса. Этот класс должен расширять класс SimpleXMLElement.

Возвращаемые значения

Функция возвращает объект класса SimpleXMLElement или null, если возникла ошибка.

Ошибки

Выбрасывает ошибку TypeError, если переданный узел node не XML и не HTML.

Список изменений

Версия Описание
8.4.0 Функция теперь выбрасывает ошибку TypeError вместо ValueError, если переданный узел node не XML и не HTML.

Примеры

Пример #1 Импорт DOM

<?php

$dom
= new DOMDocument();

$dom->loadXML('<books><book><title>чепуха</title></book></books>');

if (!
$dom) {
echo
'Ошибка при разборе документа';
exit;
}

$s = simplexml_import_dom($dom);

echo
$s->book[0]->title;

?>

Результат выполнения приведённого примера:

чепуха

Смотрите также

Добавить

Примечания пользователей 3 notes

up
-1
paul dot allsopp at digital-pig dot com
1 year ago
Why not just:
simplexml_import_dom(dom_import_simplexml($SimpleXmlNode))
up
-2
shirkaen at gmail dot com
8 years ago
/*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
up
-3
brandonkirsch at perceptionilluminates dot com
11 years ago
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
To Top