使用PHP DOMDocument将多个XML文件包装到单个XML文件中

时间:2016-04-15 19:37:32

标签: php xml

我有一堆XML文件,如下所示:

<widget>
    ...
</widget>

在PHP中,我需要将它们组合成一个XML文件,如下所示:

<widgets>
    <widget>
        ...
    </widget>
    <widget>
        ...
    </widget>
    <widget>
        ...
    </widget>
</widgets>

这对于globfile_[get/put]_contents来说是微不足道的,但是我想在DOMDocument中正确地做到这一点,因为它比这更多。我创建了一个DOMDocument实例和一个包装元素,并在循环中使用appendChild()将每个XML文件附加到所述元素中。不幸的是,我不断抛出各种错误,我只是不能把一些有用的东西放在一起。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

如果您想使用DOMDocument加载其他文件,它们本身就需要是有效的XML文件 - 即拥有一个根节点。完成后,以下代码应该有效:

// Given that $files is a list of file names of xml files to add
// Each xml file must be xml conformant - ie a single root node
$dest = new DOMDocument;
$root = $dest->createElement ('widgets');
$dest->appendChild ($root);

foreach ($files as $fn)
{
    $doc = new DOMDocument ();
    if  ($doc->load ($fn))
    {
        foreach ($doc->documentElement->childNodes as $child)
        {
            //  Copy deep for destination document
            $child = $dest->importNode ($child, true);
            $root->appendChild ($child);
        }
    }
}