2014-01-06 141 views
0

我有兩個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文件不是它的用途。 –

回答

0

我不知道你所需要的最終結構的樣子,但在內部循環,只是用的東西結合在一起,他們喜歡的addChild()

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

(例如,如果你只是想補充在cid每個Model塊),然後重新保存它,無論你想:

$xml2->saveXML($save_destination); 

我的代碼是現成的,袖口和未經考驗的,但是這是基礎。閱讀上SimpleXML的細節,特別是addChildsaveXML

注:saveXML僅僅是asXML的別名,但我認爲這是更清晰採用前在這種情況下。

編輯:作爲@MarcB指出的那樣,如果你想要做更復雜的合併,你會更好做使用更強大的DOM類加載和處理您的XML相似的流程,這樣你就可以複製/附加文件之間的節點。

+0

謝謝,我想我必須使用DOM,這只是一個簡短的例子,它比這更復雜。我是新手,因此我將搜索DOM以及如何使用它! – amles