我已经决定使用Simple
XMLElements无法做到这一点.我一直在阅读
PHP DOMDocument手册,我想我可以用迭代来做,但这似乎效率低下.有没有更好的方式没有发生在我身上?
Psuedocode-ish迭代解决方案:
@H_403_3@// two DOMDocuments with same root element $parent = new ... $otherParent = new ... $children = $parent->getElementByTagName('child'); foreach ($children as $child) { $otherParent->appendChild($child); }为清楚起见,我有两个XML文档,看起来像这样:
@H_403_3@<parent> <child> <childOfChild> {etc,more levels of nested XML trees possible} </childOfChild> </child> <child> <childOfChild> {etc,more levels possible} </childOfChild> </child> </parent>我希望输出如下:
@H_403_3@<parent> {all children of both original XML docs,order unimportant,that preserves any nested XML trees the children may have} <parent>
作为唯一可以在两个文件之间识别的公共节点,如果我对您的问题进行精确和严格的检查,则可以是根节点,因此解决方案将是:
@H_403_3@<doc1:parent>
<doc1:children>...</>
<doc2:children>...</>
</doc1:parent>
你写的订单并不重要,所以你可以在这里看到,doc2来自doc1.两个SimpleXML元素$xml1和$xml2的示例代码,它们包含上面的示例XML表单:
@H_403_3@$doc1 = dom_import_simplexml($xml1)->ownerDocument; foreach (dom_import_simplexml($xml2)->childNodes as $child) { $child = $doc1->importNode($child,TRUE); echo $doc1->saveXML($child),"\n"; $doc1->documentElement->appendChild($child); }现在$doc1包含此XML表示的文档:
@H_403_3@<?xml version="1.0"?> <parent> <child> <childOfChild> {etc,more levels possible} </childOfChild> </child> <child> <childOfChild> {etc,more levels possible} </childOfChild> </child> </parent>正如您所看到的,两个文档的树都被保留,只有您描述为相同的节点是根节点(实际上也是两个节点),所以它不会从第二个文档中接管,而只是它的子节点.