2011-12-20 52 views
0

可能重複:
Best XML Parser for PHP傳遞XML在PHP函數獲得通用XML與條件

-----首先XML ----- STR1

<HOME> 
    <USER_DETAIL> 
     <LOCATION><![CDATA[MUMBAI]]></LOCATION> 
     <NAME><![CDATA[RAVI]]></NAME> 
     <ID><![CDATA[101]]></ID> 
    </USER_DETAIL> 
    <USER_DETAIL> 
     <LOCATION><![CDATA[PUNE]]></LOCATION> 
     <NAME><![CDATA[MANISH]]></NAME> 
     <ID><![CDATA[102]]></ID> 
    </USER_DETAIL> 
</HOME> 

---第二個XML ---- str2

<USER_DATA> 
    <DATA> 
     <DOB><![CDATA[2/11/1959]]></DOB> 
     <STATUS><![CDATA[single]]></STATUS> 
     <PROFILE_PIC><![CDATA[101.JPG]]></PROFILE_PIC> 
     <ID><![CDATA[101]]></ID> 
    </DATA> 
    <DATA> 
     <DOB><![CDATA[6/8/1987]]></DOB> 
     <STATUS><![CDATA[married]]></STATUS> 
     <PROFILE_PIC><![CDATA[102.JPG]]></PROFILE_PIC> 
     <ID><![CDATA[102]]></ID> 
    </DATA> 
</USER_DATA> 

我是新來的XML。 我有兩個xml如上我想用普通的XML與用戶的所有數據。在兩個XML 通用事情是用戶ID的ID。那麼是否有任何方法可以將xml傳入函數並在第二個xml中比較id並獲取該特定用戶的詳細信息並形成必需的(Common with all detais)xml。
str1和str2是分別包含上述xml的php變量。

+0

您通常不會在XML中執行此操作。將XML轉換/解析爲一個PHP數組或對象,進行合併,然後將其輸出回XML。 – deceze 2011-12-20 09:31:14

+0

@deceze K讓我試試,謝謝你的建議,至少我可以開始.. – 2011-12-20 09:41:33

回答

2

使用下面的代碼生成一個新的XML,您可以根據您的要求更改節點。如果你在一個文件中有兩個XML,你可以使用simplexml_load_file($ filename);加載XML並將其分配給$ str1和$ str2

$str1 = "<HOME> 
<USER_DETAIL> 
    <LOCATION><![CDATA[MUMBAI]]></LOCATION> 
    <NAME><![CDATA[RAVI]]></NAME> 
    <ID><![CDATA[101]]></ID> 
</USER_DETAIL> 
<USER_DETAIL> 
    <LOCATION><![CDATA[PUNE]]></LOCATION> 
    <NAME><![CDATA[MANISH]]></NAME> 
    <ID><![CDATA[102]]></ID> 
</USER_DETAIL> 
</HOME>"; 

$str2 = "<USER_DATA> 
<DATA> 
    <DOB><![CDATA[2/11/1959]]></DOB> 
    <STATUS><![CDATA[single]]></STATUS> 
    <PROFILE_PIC><![CDATA[101.JPG]]></PROFILE_PIC> 
    <ID><![CDATA[101]]></ID> 
</DATA> 
<DATA> 
    <DOB><![CDATA[6/8/1987]]></DOB> 
    <STATUS><![CDATA[married]]></STATUS> 
    <PROFILE_PIC><![CDATA[102.JPG]]></PROFILE_PIC> 
    <ID><![CDATA[102]]></ID> 
</DATA> 
</USER_DATA>"; 

$xml1 = simplexml_load_string($str1); 
$xml2 = simplexml_load_string($str1); 
//print_r($xml); 

$tempArr = array(); 
foreach($xml1 as $obj) { 
$id = $obj->ID; 
$tempArr["$id"]['LOCATION'] = (string)$obj->LOCATION; 
$tempArr["$id"]['NAME'] = (string)$obj->NAME; 
} 
foreach($xml2 as $obj) { 
$id = $obj->ID; 
$tempArr["$id"]['DOB'] = (string)$obj->DOB; 
$tempArr["$id"]['STATUS'] = (string)$obj->STATUS; 
$tempArr["$id"]['PROFILE_PIC'] = (string)$obj->PROFILE_PIC; 
} 

//print_r($tempArr); 

$xml = new DOMDocument('1.0', 'iso-8859-1'); 

$doc = $xml->createElement('DOCUMENT'); 
$doc = $xml->appendChild($doc); 

foreach($tempArr as $ky=>$val) { 

$rnod = $xml->createElement('USER_DETAIL'); 
$rnod = $doc->appendChild($rnod); 
//$rnod = $xml->appendChild($rnod); 

$dataN0 = $xml->createElement('ID'); 
$dataN0 = $rnod->appendChild($dataN0); 

$nodV = $xml->createTextNode($ky); 
$dataN0->appendChild($nodV); 

foreach($val as $k=>$v) { 
    $dataN1 = $xml->createElement($k); 
    $dataN1 = $rnod->appendChild($dataN1); 

    $nodV1 = $xml->createTextNode($v); 
    $dataN1->appendChild($nodV1); 
} 
} 

$newXml = $xml->saveXML(); 
echo htmlspecialchars($newXml); 
+0

謝謝,適合我 – 2011-12-20 11:36:24