Why not just:
simplexml_import_dom(dom_import_simplexml($SimpleXmlNode))
(PHP 5, PHP 7, PHP 8)
simplexml_import_dom — Bir DOM düğümü alıp bir SimpleXMLElement nesnesi döndürür
$düğüm
, ?string $sınıfAdı
= SimpleXMLElement::class): ?SimpleXMLElementBir DOM düğümü alıp bir SimpleXMLElement düğümü oluşturur. Bu yeni nesne yeni bir Basit XML elemanı olarak kullanılabilir.
düğüm
Bir DOM Eleman düğümü
sınıfAdı
İsteğe bağlı bu bağımsız değişken ile bir nesne döndürmek üzere SimpleXMLElement sınıfından türetilmiş bir sınıf ismi belirtilebilir.
Başarısız olursa null
yoksa bir SimpleXMLElement
nesnesi döndürür.
Örnek 1 - DOM ithali
<?php
$dom = new DOMDocument;
$dom->loadXML('<books><book><title>blah</title></book></books>');
if (!$dom) {
echo 'Belge çözümlenemedi';
exit;
}
$s = simplexml_import_dom($dom);
echo $s->book[0]->title;
?>
Yukarıdaki örneğin çıktısı:
blah
Why not just:
simplexml_import_dom(dom_import_simplexml($SimpleXmlNode))
/*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
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