解析两个XML文件并保存到一个xml文件
问题描述:
我有两个XML文件,我必须合并为一个。我无法控制XML文件。解析两个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,但我认为必须有更好的方法。有什么建议么?
答
我不知道你所需要的最终结构的样子,但在内部循环,只是用的东西结合在一起,他们喜欢的addChild()
$xml2->model->addChild('cid',$cid);
(例如,如果你只是想补充在cid
每个Model
块),然后重新保存它,无论你想:
$xml2->saveXML($save_destination);
我的代码是现成的,袖口和未经考验的,但是这是基础。阅读上SimpleXML的细节,特别是addChild和saveXML
注:saveXML仅仅是asXML的别名,但我认为这是更清晰采用前在这种情况下。
编辑:作为@MarcB指出的那样,如果你想要做更复杂的合并,你会更好做使用更强大的DOM类加载和处理您的XML相似的流程,这样你就可以复制/附加文件之间的节点。
+0
谢谢,我想我必须使用DOM,这只是一个简短的例子,它比这更复杂。我是新手,因此我将搜索DOM以及如何使用它! – amles
使用真正的[DOM](http://php.net/dom),然后你可以从一棵树插入节点到另一棵树,然后一个简单的' - > save()'-type调用产生你的合并文件。 –
@MarcB amles正在使用XML,该表仅用于显示。 SimpleXML是一个很好的解决方案。 – cincodenada
@cincodenada:“不知道如何将它保存为xml文件”。简单的XML很简单,原因...合并两个不同的XML文件不是它的用途。 –