為了減少前端的負擔, 於是決定要將 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:
- an empty element
- an element with pure text content
- an empty element with attributes
- an element with pure text content and attributes
- an element containing elements with different names
- an element containing elements with identical names
- 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), 程式如下:
tsung_eecaac_php_xml_to_json_ecxml2jsonicc_xml_eiaaaeeecaiceceeeeaaeeae_json_cic...
http://jsonml.org/
它不需要@与#
我也不喜歡加上 @ 和 #, 但是那不就是 json 的標準嗎?
雖然 jsonml.org 寫的是這樣子, 但是那跟 json 寫的標準又不太一樣..
那這樣子會蠻混亂的說.. XD
我再去跟人討論看看~ 非常感謝您提供的資訊~ 謝謝 🙂
程式寫的不錯喔!
但能夠用註解,解釋你的邏輯,我想...會更好
就像array2json的註解一樣
不然我想等兩三個月後,你就忘記你自己當時寫這個程式的邏輯了
這個嘛, 您講的很有道理, 不過我大概寫完當下就不記得了(遞迴的東西通常都不知道在寫什麼, 莫名奇妙寫好的.. XD).. Orz...
不過我會再看一下, 加註解是應該的.. 感恩~ Orz
剛好看到這篇文章@@
$xml = simplexml_load_string($xmlstring);
$json = json_encode($xml);
$array = json_decode($json,TRUE);
這樣的方式,也可以將xml轉為json