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), 程式如下:

作者: Tsung

對新奇的事物都很有興趣, 喜歡簡單的東西, 過簡單的生活.

在〈PHP: XML to JSON 轉換程式(xml2json)〉中有 6 則留言

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

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

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

  4. 剛好看到這篇文章@@

    $xml = simplexml_load_string($xmlstring);
    $json = json_encode($xml);
    $array = json_decode($json,TRUE);

    這樣的方式,也可以將xml轉為json

發表迴響

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料