繼續昨天的PHP多維陣列轉換成XML資料格式的問題
首先要感謝昨天的兩位朋友:jordan102和xuzuning
文章連結:http://bbs.csdn.net/topics/390609227
他們二位提供的方法測試確實可行,實在。
但是在項目的開發過程中,又發現這個項目太變態了,居然還有這樣的情況
PHP數組:
$ar=array(
"auth"=> array(
"user"=> "user001",
"password"=> "pass001",
"context"=> "1"
),
"task"=> array(
"code"=>"0101",
"item"=>array(
"title"=>"abc",
"web"=>array(
"name"=>"baidu.com",
"ip"=>"1.2.3.4",
),
"web"=>array(
"name"=>"sina.com",
"ip"=>"1.1.1.1",
),
"confirm order"=>"1",
),
"reply_to"=>"[email protected]",
),
);
注意看裡面的item節點下面,有兩個web的子節點,實際上web子節點可能還有好幾個,一般是在2-4個左右
現在的轉換程式碼如下:
$xml = simplexml_load_string('');
create($ar, $xml);
$xmlData = $xml->saveXML();
echo $xmlData;
function create($ar, $xml) {
foreach($ar as $k=>$v) {
if(is_array($v)) {
$x = $xml->addChild($k);
create($v, $x);
}else $xml->addChild($k, $v);
}
}
這段代碼比較效率比較高,但是在遇到相同名稱節點的時候,就過濾了只保留最後一個節點,這樣最後輸出的結果變成了,注意看,把web的name值為baidu.com的就漏掉了。
輸出結果變成:
user001
pass001
1
0101
abc
sina.com
1.1.1.1
1
[email protected]
那個轉換的函數,我改了又改,還是一直無法輸出完整的資料,頭疼……
求各位前輩有什麼好的方法?
分享到:
------解決方案--------------------
你那個數組是不存在的,同一維數組裡面不可能出現兩個一樣的鍵名。
------解決方案--------------------
問題是入口資料是怎樣?文本?json?肯定不是你顯示的那個數組
現成的array2xml、json2xml類很多啊
------解決方案--------------------
你現在的問題不是數群組轉換xml的問題,而是在產生那個數組的時候就已經出現了問題。
或者說php中的數組已經無法表示你最原始的資料了(至少目前你採用的這種方式無法表示)
所以請把最原始的資料貼出來,改變它的表示方式,才能解決問題。
------解決方案--------------------
不是說對方的入口,是你的入口,你的array怎麼來的?不可能有相同的key
------解決方案--------------------
你這個xml貌似也沒有那麼複雜啊,不涉及中文及特殊字元的轉義問題
如果你不熟悉xml,不如通過 迴圈拼接字串的 方式來產生xml,或許更簡單一點。
------解決方案--------------------
引用:
Quote: 引用:
不是說對方的入口,是你的入口,你的array怎麼來的?不可能有相同的key
嗯,經過各位前輩的指點,現在明白了,確實是我在建立php數組並且賦值的時候,就已經定義了相同的索引值名稱,導致數組有問題。
我現在找了一個比較笨的解決方案,就是先定義一個文本變數$xmltext,把對方要求發送的xml資料文本複製進去,再使用替換的文本中的幾個變數,替換完了,直接post過去,不需要先定義數組,再轉換成xml。
這個也不算笨,其實就是php模板的做法,別忘了輸出 header->text/xml