PHP xml - 将多个文件连接在一起

时间:2011-08-23 12:56:05

标签: php xml

我有4个xml文件,我想创建一个唯一的文件,其中包含每个文件的内容,除了2个第一行和最后一行。

详细说明:

我的xml文件:

 <?xml version="1.0"?>
 <Clients xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
 <Client>
    <client_id>123458</client_id>
    <client_type>People</client_type>
    <client_sub_type>Sub people</client_sub_type>
    <name>Alerich</name>
    <surname>Higor</surname>
 </Client>
 <Client>
    <client_id>5487</client_id>
    <client_type>People</client_type>
    <client_sub_type>Sub people</client_sub_type>
    <name>Newman</name>
    <surname>Matew</surname>
 </Client>
 </Clients>

1.xml,2.xml,3.xml和4.xml有这样的内容。

我想创建一个以

开头的final.xml文件
 <?xml version="1.0"?>
 <Clients xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

结束于:

 </Clients>

在这些行之间,我想要第四个文件的所有行。

你有一些提示吗?

感谢。

2 个答案:

答案 0 :(得分:3)

您可以使用PHP DOM功能来实现此目的:

$d1 = new DOMDocument();
$d1->load('1.xml');
$root = $d1->getElementsByTagName('Clients')->item(0);

// List of other xml files
$files = array('2.xml', '3.xml', '4.xml');

foreach($files as $file) {
    $d2 = new DOMDocument();
    $d2->load($file);
    foreach($d2->getElementsByTagName('Client') as $elem) {
        $newNode = $d1->importNode($elem, true);
        $root->appendChild($newNode);
    }
}
$d1->saveXMLFile('newfile.xml'));

一般提示:不要对XML文件中的换行符做任何假设!因此,“前两行和文件最后一行”的前提可能是错误的。使用XML函数而不是字符串函数可以避免这些问题。

答案 1 :(得分:0)

使用fgets读取文件,并使用preg_match检查xml或clients标记。如果该行不匹配,请将该行写入新文件。当然,您必须在新文件周围放置一个新的xml和clients标记。