我有两个XML数据源,我想在一个XML文档中与PHP脚本合并。
第一个源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();
答案 0 :(得分:1)
这就是你需要的。您必须使用循环
添加节点 $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();
答案 1 :(得分:0)
这是因为您的$second
var(最初是DOMDocument)设置为$second->documentElement
,它是根节点。
在您的情况下,根节点是<data>
节点。
因此,当您appendChild
$second
时,如果深度参数设置为TRUE
,那么它将会使<data>
节点及其所有子节点都充满。
解决方案:您应该添加此$second
的所有子项。
foreach($second->childNodes as $secondNode){
$first->documentElement->appendChild($secondNode);
}