如何更改PHP代码以合并任意数量的XML文件

时间:2015-06-28 10:27:04

标签: php xml merge

这里的工作代码(我用here)将两个XML文件合并为一个。它运行正常,但只有2个部分的xml。

<?php
$numparts=2;
$filename1='TEST_1.xml';
$filename2='TEST_2.xml';
$doc1 = new DOMDocument();
$doc1->load($filename1);

$doc2 = new DOMDocument();
$doc2->load($filename2);

// get 'res' element of document 1
$res1 = $doc1->getElementsByTagName('items')->item(0); //edited res - items

// iterate over 'item' elements of document 2
$items2 = $doc2->getElementsByTagName('item');

for ($i = 0; $i < $items2->length; $i ++) {
$item2 = $items2->item($i);

// import/copy item from document 2 to document 1
$item1 = $doc1->importNode($item2, true);

// append imported item to document 1 'res' element
$res1->appendChild($item1);
}
$doc1->save('merged.xml'); //edited -added saving into xml file
?>

请帮助更改代码以使用任意数量的片段(存储在变量$ numparts中)。

1 个答案:

答案 0 :(得分:0)

首先,使用循环,创建文件名的数组,以及您希望合并的相应文档。

$numparts = 3;
// Create an array of $numparts filenames of the xml files you wish to merge
$filenames = array();
for ($i = 1; $i <= $numparts; $i++) {
    $filenames[$i] = 'TEST_' . $i . '.xml';
}
// Create an array of DOM Document objects, one for each xml file
$docs = array();
for ($i = 1; $i <= count($filenames); $i++) {
    $docs[$i] = new DOMDocument();
    $docs[$i]->load($filenames[$i]);
}

然后创建一个循环,迭代除第一个文档之外的所有文档,并嵌套循环文档中的项目(代码示例中的项目)的循环。

// get 'res' element of document 1
$doc1 = $docs[1];
 $res1 = $doc1->getElementsByTagName('items')->item(0); //edited res - items
// iterate over all the rest of the documents
for ($i = 2; $i <= count($docs); $i++) {
    $doci = $docs[$i];
    // iterate over 'item' elements of document i
    $itemsi = $doci->getElementsByTagName('item');
    for ($j = 0; $j < $itemsi->length; $j++) {
        $itemi = $itemsi->item($j);
        // import/copy item from document i to document 1
        $item1 = $doc1->importNode($itemi, true);
        // append imported item to document 1 'res' element
        $res1->appendChild($item1);
    }
}
$doc1->save('merged.xml'); //edited -added saving into xml file