PHP 8.4.2 Released!

simplexml_import_dom

(PHP 5, PHP 7, PHP 8)

simplexml_import_domObtém um objeto SimpleXMLElement a partir de um nó XML ou HTML

Descrição

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

Esta função recebe um nó de um documento DOM e o transforma em um nó SimpleXML. O novo objeto pode ser utilizado como um elemento SimpleXML nativo.

Parâmetros

node

Um nó DOM

class_name

Pode-se utilizar o parâmetro opcional simplexml_import_dom() para retornar um objeto da classe especificada. A classe deve estender a classe SimpleXMLElement.

Valor Retornado

Retorna um SimpleXMLElement ou null em caso de falha.

Erros/Exceções

Lança um TypeError quando for passado um node que não seja XML ou HTML.

Registro de Alterações

Versão Descrição
8.4.0 Adicionado suporte para Dom\Document.
8.4.0 Esta função agora lança um TypeError ao invés de um ValueError quando for passado um node que não seja XML ou HTML.

Exemplos

Exemplo #1 Importando um DOMDocument

<?php
$dom
= new DOMDocument;
$dom->loadXML('<books><book><title>blah</title></book></books>');
if (!
$dom) {
echo
'Erro ao interpretar o documento';
exit;
}

$s = simplexml_import_dom($dom);

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

O exemplo acima produzirá:

blah

Exemplo #2 Importando um Dom\Document

<?php
$dom
= Dom\XMLDocument::createFromString('<livros><livro><titulo>Blá</titulo></livro></livros>');

$s = simplexml_import_dom($dom);

echo
$s->livro[0]->titulo;
?>

O exemplo acima produzirá:

Blá

Veja Também

adicione uma nota

Notas Enviadas por Usuários (em inglês) 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