我有两个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,但我认为必须有更好的方法。有什么建议吗?
答案 0 :(得分:0)
我不确定你需要什么样的最终结构,但在内部循环中,只需将它们与addChild()
等组合在一起$xml2->model->addChild('cid',$cid);
(例如,如果您只想将cid
添加到每个Model
块),然后将其重新保存到您想要的任何位置:
$xml2->saveXML($save_destination);
我的代码是袖手旁观,未经测试,但这是基础知识。请阅读SimpleXML了解详情,尤其是addChild和saveXML
注意:saveXML只是asXML的别名,但我认为在这种情况下使用前者更清楚。
编辑正如@MarcB指出的那样,如果你想进行更复杂的合并,你最好使用功能更强大的DOM类进行类似的流程来加载操纵您的XML,这样您就可以在文件之间复制/追加节点。