Php 解析两个XML文件并保存到一个XML文件中

Php 解析两个XML文件并保存到一个XML文件中,php,xml,parsing,Php,Xml,Parsing,我有两个XML文件,必须合并成一个。我无法控制XML文件 第一个XML看起来像: <Make> <cid>xxx</cid> <cname>xxx</cname> </Make> <Make> <cid>xxx</cid> <cname>xxx</cname> </Make> ... <Models> <Model

我有两个XML文件,必须合并成一个。我无法控制XML文件

第一个XML看起来像:

<Make>
  <cid>xxx</cid>
  <cname>xxx</cname>
</Make>
<Make>
  <cid>xxx</cid>
  <cname>xxx</cname>
</Make>
...
<Models>
  <Model>
    <mid>xxx</mid>
    <model>xxx</model>
    <rem>xxx</rem>
  </Model>
  <Model>
    <mid>xxx</mid>
    <model>xxx</model>
    <rem>xxx</rem>
  </Model>
 ...
</Models>

xxx
xxx
xxx
xxx
...
第二个XML需要第一个XML中的“cid”来解析。第二个XML看起来像:

<Make>
  <cid>xxx</cid>
  <cname>xxx</cname>
</Make>
<Make>
  <cid>xxx</cid>
  <cname>xxx</cname>
</Make>
...
<Models>
  <Model>
    <mid>xxx</mid>
    <model>xxx</model>
    <rem>xxx</rem>
  </Model>
  <Model>
    <mid>xxx</mid>
    <model>xxx</model>
    <rem>xxx</rem>
  </Model>
 ...
</Models>

xxx
xxx
xxx
xxx
xxx
xxx
...
我可以解析这两个文件并将它们放在一个表中。但我不知道如何将其保存为XML文件。该表的代码为:

<?php
$url = 'http://url-to-pars-xml-file';
$xml = simplexml_load_file($url); 

echo '<table border="1" ><tbody><tr><td>cid</td><td>cname</td><td>mid</td><td>model</td>   <td>rem</td></tr>';

foreach ($xml as $cname):
$cid = $cname->cid;
$cname = $cname->cname;

//get models
$url2 = 'http://second-url-to-pars-xml-file?cid='.$cid;
$xml2 = simplexml_load_file($url2); 

//info from model
foreach ($xml2 as $rem):
    $mid = $rem->mid;
    $model = $rem->model;
    $rem = $rem->rem;

        $r ='<tr>';
        $r .='<td>'.$cid.'</td>';
        $r .='<td>'.$cname.'</td>';
        $r .='<td>'.$mid.'</td>';
        $r .='<td>'.$model.'</td>';
        $r .='<td>'.$rem.'</td>';
        $r .='</tr>';

        echo $r;

endforeach;
endforeach;

echo '</tbody></table>';

?>


也许我可以将表保存为XML,但我认为一定有更好的方法。有什么建议吗?

我不确定您需要什么样的最终结构,但在内部循环中,只需将它们与addChild()之类的东西结合起来即可

(例如,如果您只想将
cid
添加到每个
模型
块中),然后在需要的地方重新保存它:

$xml2->saveXML($save_destination);
我的代码是现成的,未经测试,但这是最基本的。详细阅读,尤其是

注意:saveXML只是asXML的别名,但我认为在本例中使用前者更为清晰


编辑:正如@MarcB所指出的,如果您想进行更复杂的合并,最好使用功能更强大的类来加载和操作XML,这样您就可以在文件之间复制/附加节点。

使用real,然后您可以将节点从一棵树插入另一棵树,然后执行简单的
->save()
-type call生成合并文档。@MarcB amles正在处理XML,该表仅用于显示。SimpleXML是一个很好的解决方案。@cincodenada:“不知道如何将其保存为xml文件”。简单xml之所以简单是因为。。。合并两个完全不同的xml文档不是它的目的。啊,没错,这取决于合并有多复杂。SimpleXML仍然可以很好地保存。谢谢,我想我必须使用DOM,这只是一个简短的示例,它比这个更复杂。我是新手,所以我将搜索DOM以及如何使用它!