这里的工作代码(我用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中)。
答案 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