【发布时间】:2009-07-29 21:14:29
【问题描述】:
我正在将一些代码从 SimpleXML 移动到 PHP 的 DOM,但还没有完全得到对象。
例如,在 SimpleXML 中,我可以很容易地创建嵌套元素,如下所示:
$Settings = new SimpleXMLElement("<root></root>");
$Settings->addChild('el1');
$Settings->el1->addChild('el2');
$Settings->el1->el2->addChild('el3');
$Settings->el1->el2->el3->addChild('el4', 'text');
echo("<pre>".htmlspecialchars(str_replace("><", ">\n<",$Settings->asXML()))."</pre>");
// Result
<?xml version="1.0"?>
<root>
<el1>
<el2>
<el3>
<el4>text</el4>
</el3>
</el2>
</el1>
</root>
虽然在 DOM 中,我似乎需要跟踪句柄,或者获取一个列表并循环遍历它,以便获取特定元素的 DOMElement。一定有一个更简单的方法,我错过了......
假设我有以下代码,并想像上面一样添加el1、el2、el3 等。最不冗长的方法是什么?最好不必为每个要添加子节点的节点使用变量作为句柄,也不必通过循环获取它们。
$DOMXML = new DOMDocument();
$DOMXML->appendChild($DOMXML->createElement('root'));
$DOMXML->documentElement->appendChild($DOMXML->createElement('el1));
// ...
echo($DOMXML->saveXML(););
【问题讨论】:
-
使用importNode并将第二个参数(deep)设置为true,所以它会递归复制树。