2013-02-05 50 views
0

我有一個XML文件,如下所示:設置有鍵/值對的XML在PHP

<response uri="/crm/private/xml/SalesOrders/getSearchRecordsByPDC"><result><SalesOrders><row no="1"><FL val="SALESORDERID">580005000000187001</FL><FL val="SO Number">580005000000187002</FL><FL val="Subject">Sales order test from sri 02</FL><FL val="Due Date">2013-03-10</FL><FL val="Carrier">FedEX</FL><FL val="Status">Created</FL><FL val="ACCOUNTID">580005000000088096</FL><FL val="Account Name">Best Western Pavilions</FL><FL val="SMOWNERID">580005000000052003</FL><FL val="Sales Order Owner">Adithya Buddhavarapu</FL><FL val="SMCREATORID">580005000000052003</FL><FL val="Created By">Adithya Buddhavarapu</FL><FL val="MODIFIEDBY">580005000000052003</FL><FL val="Modified By">Adithya Buddhavarapu</FL><FL val="Created Time">2013-01-17 20:32:19</FL><FL val="Modified Time">2013-02-05 07:37:33</FL><FL val="Sub Total">250</FL><FL val="Tax">0</FL><FL val="Adjustment">0</FL><FL val="Grand Total">250</FL><FL val="Product Details"><product no="1"><FL val="Product Id">580005000000171125</FL><FL val="Product Name">The Grilling Maestro</FL><FL val="Unit Price">10.0</FL><FL val="Quantity">20.0</FL><FL val="Quantity in Stock">0.0</FL><FL val="Total">200.0</FL><FL val="Discount">0.0</FL><FL val="Total After Discount">200.0</FL><FL val="List Price">10.0</FL><FL val="Net Total">200.0</FL><FL val="Tax">0.0</FL><FL val="Product Description">null</FL></product><product no="2"><FL val="Product Id">580005000000171131</FL><FL val="Product Name">Uptown Deli Soup du Jour</FL><FL val="Unit Price">25.0</FL><FL val="Quantity">1.0</FL><FL val="Quantity in Stock">0.0</FL><FL val="Total">50.0</FL><FL val="Discount">1.23</FL><FL val="Total After Discount">23.77</FL><FL val="List Price">25.0</FL><FL val="Net Total">48.77</FL><FL val="Tax">0.0</FL><FL val="Product Description">null</FL></product></FL><FL val="Terms and Conditions">iBanquet T and C</FL><FL val="Description">Sales Order from iBanquet</FL><FL val="Discount">0</FL></row></SalesOrders></result></response> 

從這個xml文件我需要形成具有鍵/值對等array(的SalesOrderID =陣列>' 580005000000187001' , SO數=> '580005000000187002' , ....總計=> '250' ,Product Details => array([0]=>(Product Id =>'580005000000171125',Product Name => 'The Grilling Maestro',....,Product Description =>'null'),[1]=>(Product Id => '580005000000171131',....,Product Description =>'null')

我做了嘗試,如:

$xml = simplexml_load_file($file_sales_content,'SimpleXMLElement', LIBXML_NOCDATA); 
$order_array = array(); 
//store the Leads record into session according to the first name 
foreach($xml->result->SalesOrders->row as $na){ 
array_push($order_array,$na->FL[0].":".$na->FL[1]."=".$na->FL[2]."^".$na->FL[3]."$".$na->FL[4]); 
} 

其中$file_sales_content正在存儲xml值。但在這段代碼中,我只能捕捉到價值而不是關鍵。

任何人都可以幫助我。 謝謝。

+0

的foreach($ XML-> result-> SalesOrders->行作爲關鍵$ => $值)??這是你正在嘗試做什麼?或者它不工作? – swapnesh

+0

沒有它的不工作。 – Srimanta

回答

0
$file_sales_content = "test.xml"; 
$i=0; 
$xml = simplexml_load_file($file_sales_content); 
$order_array = array(); 
foreach($xml->result->SalesOrders->row->FL as $na){ 
    $tag = (String)$na->attributes(); 
    $order_array[$tag] = (String)$na; 
    if($tag == "Product Details"){    
     foreach($na->product as $na_prd){ 
      $i++; 
      foreach($na_prd->FL as $prd_Acc){ 
       $order_array[$i][(String)$prd_Acc->attributes()] = (String)$prd_Acc; 
      }     
     } 
    } 
} 
print_r($order_array); 
+0

除了產品詳細信息之外,我將通過遊覽代碼片段獲取所有鍵/值對的值。你能檢查一次嗎? – Srimanta

+0

我已更新代碼以獲取產品詳細信息 – Anand

+0

非常感謝。它的工作正常。 – Srimanta

0

您的代碼已關閉,但您實際上可以更深入地迭代一個級別。

此外,SimpleXmlElement的屬性可以使用[]表示法檢索。

$output = array(); 
foreach($xml->result->SalesOrders->row->FL as $fl) { 
    $output[$fl['val']] = (string)$fl; 
}