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

解析两个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,但我认为必须有更好的方法。有什么建议么?

+0

使用真正的[DOM](http://php.net/dom),然后你可以从一棵树插入节点到另一棵树,然后一个简单的' - > save()'-type调用产生你的合并文件。 –

+0

@MarcB amles正在使用XML,该表仅用于显示。 SimpleXML是一个很好的解决方案。 – cincodenada

+0

@cincodenada:“不知道如何将它保存为xml文件”。简单的XML很简单,原因...合并两个不同的XML文件不是它的用途。 –

我不知道你所需要的最终结构的样子,但在内部循环,只是用的东西结合在一起,他们喜欢的addChild()

$xml2->model->addChild('cid',$cid); 

(例如,如果你只是想补充在cid每个Model块),然后重新保存它,无论你想:

$xml2->saveXML($save_destination); 

我的代码是现成的,袖口和未经考验的,但是这是基础。阅读上SimpleXML的细节,特别是addChildsaveXML

注:saveXML仅仅是asXML的别名,但我认为这是更清晰采用前在这种情况下。

编辑:作为@MarcB指出的那样,如果你想要做更复杂的合并,你会更好做使用更强大的DOM类加载和处理您的XML相似的流程,这样你就可以复制/附加文件之间的节点。

+0

谢谢,我想我必须使用DOM,这只是一个简短的例子,它比这更复杂。我是新手,因此我将搜索DOM以及如何使用它! – amles