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

如何更改php代码以合并任意数量的XML文件,php,xml,merge,Php,Xml,Merge,这里是将两个XML文件合并为一个XML文件的工作代码。它工作正常,但只使用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

这里是将两个XML文件合并为一个XML文件的工作代码。它工作正常,但只使用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
?>
load($filename1);
$doc2=新的DOMDocument();
$doc2->load($filename2);
//获取文档1的“res”元素
$res1=$doc1->getElementsByTagName('items')->item(0)//编辑的资源-项目
//迭代文档2的“item”元素
$items2=$doc2->getElementsByTagName('item');
对于($i=0;$i<$items2->length;$i++){
$item2=$items2->item($i);
//将项目从文档2导入/复制到文档1
$item1=$doc1->importNode($item2,true);
//将导入的项目追加到文档1“res”元素
$res1->appendChild($item1);
}
$doc1->save('merged.xml')//已编辑-添加保存到xml文件
?>

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

首先,使用循环创建要合并的文件名及其对应文档的数组

$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]);
}
$numparts=3;
//创建要合并的xml文件的$numparts文件名数组
$filenames=array();
对于($i=1;$i getElementsByTagName('items')->item(0);//已编辑的res-items
//迭代所有其他文档
对于($i=2;$i getElementsByTagName('item');
对于($j=0;$j<$itemsi->length;$j++){
$itemi=$itemsi->item($j);
//将项目从文件i导入/复制到文件1
$item1=$doc1->importNode($itemi,true);
//将导入的项目追加到文档1“res”元素
$res1->appendChild($item1);
}
}
$doc1->save('merged.xml');//edited-将保存添加到xml文件中

到目前为止你做了什么?只需将它放在一个循环中并合并多个文件。因此,如果你有3个文件:将doc1与doc2合并到doc12,然后将doc12与DOC3合并,等等。感谢你的想法,我将非常感谢你!它工作得很好!我尝试了循环,但没有任何效果。我为我的错误和对PHP的无知感到羞愧。再次感谢!
// 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