星期一, 十月 30, 2006

PHP: XML to JSON 轉換程式(xml2json)

為了減少前端的負擔, 於是決定要將 XML 轉 JSON 的工作轉到後端去做, 但是找了許久找不到 XML to JSON 的程式, 於是就自己寫了轉換程式.

基本上比想像中麻煩一點, 沒想到還有 @, # 等等一些怪怪的規則~ 所以程式寫起來比較亂一點.

此程式就是照此篇文章規則寫的: Converting Between XML and JSON

有 Javascript 版可以 線上轉換 參考: XML to JSON – a converter

照上述文章, 將規則轉載過來.

A single structured XML element might come in seven flavors:

  1. an empty element
  2. an element with pure text content
  3. an empty element with attributes
  4. an element with pure text content and attributes
  5. an element containing elements with different names
  6. an element containing elements with identical names
  7. an element containing elements and contiguous text

The following table shows the corresponding conversion patterns between XML and JSON.

Pattern XML JSON Access
1 <e/> "e": null o.e
2 <e>text</e> "e": "text" o.e
3 <e name="value" /> "e":{"@name": "value"} o.e["@name"]
4 <e name="value">text</e> "e": { "@name": "value", "#text": "text" } o.e["@name"] o.e["#text"]
5 <e> <a>text</a> <b>text</b> </e> "e": { "a": "text", "b": "text" } o.e.a o.e.b
6 <e> <a>text</a> <a>text</a> </e> "e": { "a": ["text", "text"] } o.e.a[0] o.e.a[1]
7 <e> text <a>text</a> </e> "e": { "#text": "text", "a": "text" } o.e["#text"] o.e.a

再來下述三個 function 就是做 XML2JSON 的程式(此程式寫完尚未經過完整測試, 若有任何問題, 還請回報跟我說, 謝謝):

如果不想看程式的, 可以直接抓取後(xml2json.phps), 用以下方法直接使用即可.

$json = Xml2Json($xml_data); echo $json;

此程式經由 Leeym 大大的大力協助 和 Joseph 的大力測試下, 發現了不少問題, 所以把 v1 版本換掉, 以後請抓 v2 版本.

此版本整個 tgz 也附上測試的程式, 執行方法: php xml2json.php 1.xml

另一個常用的是 array2json, 正好看到有個站有寫好的, 轉載過來(轉載自: array2json() - Convert PHP arrays to JSON), 程式如下:

相關標籤

this is comment icon 我觉得jsonml的格式更具合理. [回覆]

http://jsonml.org/

它不需要@与#

Comment by xmlspace (01/20/2007 13:58)

this is comment icon 回 xmlspace [回覆]

我也不喜歡加上 @ 和 #, 但是那不就是 json 的標準嗎?
雖然 jsonml.org 寫的是這樣子, 但是那跟 json 寫的標準又不太一樣..
那這樣子會蠻混亂的說.. XD
我再去跟人討論看看~ 非常感謝您提供的資訊~ 謝謝 :)

Comment by Tsung (01/20/2007 14:06)

this is comment icon 哈樓 [回覆]

程式寫的不錯喔!
但能夠用註解,解釋你的邏輯,我想...會更好
就像array2json的註解一樣
不然我想等兩三個月後,你就忘記你自己當時寫這個程式的邏輯了

Comment by 布丁 (03/29/2007 09:52)

this is comment icon 回 布丁 [回覆]

這個嘛, 您講的很有道理, 不過我大概寫完當下就不記得了(遞迴的東西通常都不知道在寫什麼, 莫名奇妙寫好的.. XD).. Orz...
不過我會再看一下, 加註解是應該的.. 感恩~ Orz

Comment by Tsung (03/29/2007 13:57)
Add this page to del.icio.us

發表迴響

標題

內容 (限制 1000 字)

暱稱

電子郵件

個人網頁


 authimage


PS: 若無法留言, 請先確認是否有打開 JavaScript, 造成您的困擾, 實在萬分對不起 Orz...(如果無法留言, 勞煩可以發信給我好嗎? 謝謝.)
PS2: 若您的留言被誤判, 我都會再自行看過, 不需要一直重覆張貼~