1

我有两个 XML 数据源,我想将它们与 PHP 脚本合并到一个 XML 文档中。

第一个源 XML 文档

<book>
 <id>1</id>
 <title>Republic</title>
</book>

第二个源 XML 文档

<data>
 <author>Plato</author>
 <language>Greek</language>
</data>

我想将两者结合起来得到

<book>
 <id>1</id>
 <title>Republic</title>
 <author>Plato</author>
 <language>Greek</language>
</book>

但我得到的是

<book>
 <id>1</id>
 <title>Republic</title>
<data>
 <author>Plato</author>
 <language>Greek</language>
</data></book>

这是我的代码

$first = new DOMDocument("1.0", 'UTF-8');
$first->formatOutput = true;
$first->loadXML(firstXML);

$second = new DOMDocument("1.0", 'UTF-8');
$second->formatOutput = true;
$second->loadXML(secondXML);

$second = $second->documentElement;

$first->documentElement->appendChild($first->importNode($second, TRUE));

$first->saveXML();

$xml = new DOMDocument("1.0", 'UTF-8');
$xml->formatOutput = true;
$xml->appendChild($xml->importNode($first->documentElement,true));

return $xml->saveXML();
4

2 回答 2

2

这就是你需要的。您必须使用循环添加节点

        $first = new DOMDocument("1.0", 'UTF-8');
        $first->formatOutput = true;
        $first->loadXML($xml_string1);



        $second = new DOMDocument("1.0", 'UTF-8');
        $second->formatOutput = true;
        $second->loadXML($xml_string2);
        $second = $second->documentElement;

        foreach($second->childNodes as $node)
        {

           $importNode = $first->importNode($node,TRUE);
           $first->documentElement->appendChild($importNode);
        }


        $first->saveXML();

        $xml = new DOMDocument("1.0", 'UTF-8');
        $xml->formatOutput = true;
        $xml->appendChild($xml->importNode($first->documentElement,true));

        return $xml->saveXML();
于 2013-03-19T04:56:39.427 回答
0

这是因为您的$secondvar(最初是 DOMDocument)被设置为$second->documentElement哪个是根节点。

在您的情况下,根节点是<data>节点。

因此,当您appendChild $second将 deep 参数设置为TRUE时,它将附加<data>节点及其所有子节点。

解决方案:您应该改为附加 this 的所有子级$second

foreach($second->childNodes as $secondNode){
    $first->documentElement->appendChild($secondNode);
}
于 2013-03-19T04:30:49.210 回答