繼續昨天的PHP多維陣列轉換成XML資料格式的有關問題

來源:互聯網
上載者:User
繼續昨天的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
  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.