2013-07-23 71 views
0

我正在嘗試製作一種通用簡單的XML來排列類型的腳本。XML Praser:檢測重複節點

我們的想法是,以檢測哪些節點重複以便爲標籤名我需要循環

例如

進料1: -

<carfeed> 
<sometag> 
<child> 
Child content 
</child> 
</sometag> 
<cars> 
<car> 
<name>Ford</name> 
<color>Blue</color> 
</car> 
<car> 
<name>Nissan</name> 
<color>Red</color> 
</car> 
</cars> 
</carfeed> 

進料2: -

<vehicles> 
<vehicle> 
<name>Ford</name> 
<color>Blue</color> 
<type>Pickup</type> 
</vehicle> 
<vehicle> 
<name>Nissan</name> 
<color>Red</color> 
<type>Car</type> 
</vehicle> 
</vehicles> 

因此,在飼料1中,循環的標籤是汽車,飼料2是汽車。

我到目前爲止的邏輯是循環連續出現的節點是有辦法來檢測這個。

+0

你想出什麼代碼? – michi

回答

0

我打算在這裏做一些假設,因爲我無法從這個問題中得到很多。

  1. 要分析在PHP的XML和需要的PHP代碼
  2. 你想在第一XML文件<car>標籤匹配的第二XML文件<vehicle>標籤。

基於上述假設,這裏是它


$xml1 = simplexml_load_string($xmlData1,null, LIBXML_NOERROR | LIBXML_NOWARNING); //$xmlData1 is the first xml 
$carsArr = array(); 
foreach ($xml1->cars->car as $car) { 
    $carsArr[(string)$car->name] = array(); 
    $carsArr[(string)$car->name]= (string)$car->color; //create map of car name to color 
} 


$xml2 = simplexml_load_string($$xmlData2,null, LIBXML_NOERROR | LIBXML_NOWARNING); //$xmlData2 is the second xml 
foreach($xml2->vehicle as $vehicle) { 
    $name = (string)$vehicle->name; 
    if(isset($carsArr[$name])) { 
     echo "Name:".$name.",Color:".$carsArr[$name].",Type:".$vehicle->type."
"; } }

程序的輸出將是:

名稱:福特,顏色:藍色,類型:皮卡
名稱:日產,顏色:紅色,類型:車型

通過這種方式,您可以檢測兩個文件之間的重複節點。

+0

感謝您的回覆,但我想編寫一個腳本,可以自動檢測重複節點,而不是顯式搜索和循環「cars-> car」和「vehicle」。檢測哪個標籤在循環的通用代碼。 – Samosa

+0

難道你仍然可以澄清,因爲我很困惑。根據我的理解,你想檢測兩個文件中的重複節點。真正?你能舉個例子嗎? –

+0

@KaranAshar我想他想編寫一次解析** ONE ** XML文件的代碼,並檢測至少有一個同名兄弟的節點,比如他的第一個示例中的「」。無論節點是如何命名的,他都希望自己的代碼能夠處理** ANY ** XML。 – michi