2021年7月10日土曜日

encoding/xml使ってXMLをJSON変換

 やりたくなかったけど、大体できた。

以下テストコード

package xml2json

import "testing"

func TestXml2JSON(t *testing.T) {
    //  xmlstr := "<data>aiueo</data>"
    //  xmlstr := "<data>aiueo</data><data>bbbbb</data>"

    xmlstr := "<DATA TYPE=\"JSON\" FORCEARRAY=\"//LIST/ITEM //LIST/ITEM/TAGS\">" +
        "<LIST>" +
        "  <ITEM id='1'>" +
        "    <UUID>0f164f93-fe33-44d4-8f2a-f94518b7cb51</UUID>" +
        "    <TITLE>たいとるなんな</TITLE>" +
        "    <TAGS>(:コメントはどうなるの?:)" +
        "      <name ID='1' IMPORTANCE='20'>あいうえお</name>" +
        "      <name>かきくけこ</name>" +
        "      <OTHER>aaaa</OTHER>" +
        "      <name>さしすせそ</name>" +
        "    </TAGS>" +
        "  </ITEM>" +
        "  <ITEM>" +
        "    <UUID>f36ea96f-97a8-438e-8656-ca7365f23df9</UUID>" +
        "    <TITLE>たいとるなんです</TITLE>" +
        "    <TAGS>(:コメントはどうなるの?:)" +
        "      <name>あああ</name>" +
        "      <name>いいいい</name>" +
        "      <name>ううううう</name>" +
        "    </TAGS>" +
        "  </ITEM>" +
        "</LIST>" +
        "</DATA>"

    xml2json(xmlstr)
}


変換後(改行はないけどフォーマットした)

{
    "DATA": {
        "-TYPE""JSON",
        "-FORCEARRAY""//LIST/ITEM //LIST/ITEM/TAGS",
        "LIST": {
            "ITEM": [
                {
                    "-id""1",
                    "UUID""0f164f93-fe33-44d4-8f2a-f94518b7cb51",
                    "TITLE""たいとるなんな",
                    "TAGS": {
                        "name": [
                            {
                                "-ID""1",
                                "-IMPORTANCE""20",
                                "#text""あいうえお"
                            },
                            "かきくけこ",
                            "さしすせそ"
                        ],
                        "OTHER""aaaa"
                    }
                },
                {
                    "UUID""f36ea96f-97a8-438e-8656-ca7365f23df9",
                    "TITLE""たいとるなんです",
                    "TAGS": {
                        "name": [
                            "あああ",
                            "いいいい",
                            "ううううう"
                        ]
                    }
                }
            ]
        }
    }
}

あと考慮するのは以下2点

1.どこのパスからパースするかの指定をアトリビュートに持つ

2.FORCEARRAYの機能実装

どちらも目処は立っている

0 件のコメント: