Я не думаю, что есть способ сделать то, что вы хотите, используя DOM :-(
Я пытался некоторое время назад, когда мне нужно было сгенерировать некоторые XML-файлы с помощью DOM ...
Единственное, что я мог придумать, было что-то вроде того, к чему вы, вероятно, обращаетесь; длинный длинный пакет кода; вот так я полагаю:
<code>$DOMXML = new DOMDocument();
$root = $DOMXML->createElement('root');
$DOMXML->appendChild($root);
$elt1 = $DOMXML->createElement('el1');
$root->appendChild($elt1);
$elt2 = $DOMXML->createElement('el2');
$elt1->appendChild($elt2);
$elt3 = $DOMXML->createElement('el3');
$elt2->appendChild($elt3);
$elt4 = $DOMXML->createElement('el4');
$elt4->appendChild($DOMXML->createTextNode('text'));
$elt3->appendChild($elt4);
echo("<pre>".htmlspecialchars(str_replace("><", ">\n<",$DOMXML->saveXML()))."
");
Это действительно довольно долго :-(
Ладно, это мощно, с этим можно многое сделать ... Но все же писать боль ^^
Альтернативным решением было бы использование обеих возможностей SimpleXML и DOM:
Во-первых, создайте (просто) свой XML-документ, используя SimpleXML, как вы сказали ранее:
$simple2 = new SimpleXMLElement("<root></root>");
$simple2->addChild('el1');
$simple2->el1->addChild('el2');
$simple2->el1->el2->addChild('el3');
$simple2->el1->el2->el3->addChild('el4', 'text');
А затем преобразовать его в DOMDocument, используя dom_import_simplexml
:
<code>// Convert to DOMDocument
$dom2 = new DOMDocument();
$dom2->appendChild(
$dom2->importNode(
dom_import_simplexml($simple2),
true
)
);
// Now, you can do your stuff that requires a DOMDocument object ;-)
// Well, right now, displaying it will be enough, I suppose ?
echo("<pre>".htmlspecialchars(str_replace("><", ">\n<",$dom2->saveXML()))."
");
Вы получите точно такой же выход:
<?xml version="1.0"?>
<root>
<el1>
<el2>
<el3>
<el4>text</el4>
</el3>
</el2>
</el1>
</root>
Возможно, это не самое простое и не самое эффективное решение ... Но, похоже, оно работает и выполняет свою работу; -)
Если у кого-то есть другая идея ... Мне тоже интересно, в следующий раз мне придется иметь дело с DOMDocument
!