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

时间:2014-01-06 19:18:04

标签: php xml parsing

我有两个XML文件,我必须将它们合并为一个。我无法控制XML文件。

第一个XML看起来像:

<Make>
  <cid>xxx</cid>
  <cname>xxx</cname>
</Make>
<Make>
  <cid>xxx</cid>
  <cname>xxx</cname>
</Make>
...

第二个XML需要从第一个解析的'cid'。第二个XML看起来像:

<Models>
  <Model>
    <mid>xxx</mid>
    <model>xxx</model>
    <rem>xxx</rem>
  </Model>
  <Model>
    <mid>xxx</mid>
    <model>xxx</model>
    <rem>xxx</rem>
  </Model>
 ...
</Models>

我可以解析这两个文件并将它们放在一个表中。但我不知道如何将其保存为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,但我认为必须有更好的方法。有什么建议吗?

1 个答案:

答案 0 :(得分:0)

我不确定你需要什么样的最终结构,但在内部循环中,只需将它们与addChild()

等组合在一起
$xml2->model->addChild('cid',$cid);

(例如,如果您只想将cid添加到每个Model块),然后将其重新保存到您想要的任何位置:

$xml2->saveXML($save_destination);

我的代码是袖手旁观,未经测试,但这是基础知识。请阅读SimpleXML了解详情,尤其是addChildsaveXML

注意:saveXML只是asXML的别名,但我认为在这种情况下使用前者更清楚。

编辑正如@MarcB指出的那样,如果你想进行更复杂的合并,你最好使用功能更强大的DOM类进行类似的流程来加载操纵您的XML,这样您就可以在文件之间复制/追加节点。