なんでこんなバグがあるんだろうなぁ
package xml2json
import (
"fmt"
"log"
"strings"
"github.com/sbabiv/xml2map"
)
func xml2json(xmlstr string) {
decoder := xml2map.NewDecoder(strings.NewReader(xmlstr))
result, err := decoder.Decode()
if err != nil {
log.Printf("info: err = %v\n", err)
} else {
log.Printf("info: result = %v\n", result)
/*
2021/07/07 22:48:58 info: result = map[DATA:map[@FORCEARRAY://LIST/ITEM //LIST/ITEM/TAGS @TYPE:JSON LIST:map[ITEM:[map[@id:1 TAGS:map[OTHER:aaaa name:[map[#text:あいうえお @ID:1 @IMPORTANCE:20] map[name:かきくけこ] map[name:さしすせそ]]] TITLE:たいとるなんな UUID:0f164f93-fe33-44d4-8f2a-f94518b7cb51] map[TAGS:map[name:[あああ いいいい ううううう]] TITLE:たいとるなんです UUID:f36ea96f-97a8-438e-8656-ca7365f23df9]]]]]
あれ、map[name:かきくけこ] map[name:さしすせそ] ここがnameでまとまってないバグじゃん・・・
ありえねー---
なんでこんなバグがあるんだー
これやはり、XMLからgoの仮想ファイルシステム作って考えた方がいいかもしれない・・・
*/
}
v := result["DATA"]
log.Printf("info: result[\"DATA\"] = %v\n", v)
// DATAのアトリビュートは以下の様に取得できる
ForceArray := strings.Split(result["DATA"].(map[string]interface{})["@FORCEARRAY"].(string), " ")
Type := strings.Split(result["DATA"].(map[string]interface{})["@TYPE"].(string), " ")
log.Println("info: ForceArray[0] = ", ForceArray[0], " ForceArray[1] = ", ForceArray[1], " Type = ", Type)
// DATAの子ノードはLISTという決まりはないので以下のような取り方はダメ
//やるとしたらDATAも含めて回さないといけない
l := result["DATA"].(map[string]interface{})["LIST"]
fmt.Printf("DATA/LIST: %v\n", l)
}
んで、テスト
package xml2json
import "testing"
func TestXml2JSON(t *testing.T) {
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)
}
で、ソース中にも書いたけどさ
/*
2021/07/07 22:48:58 info: result = map[DATA:map[@FORCEARRAY://LIST/ITEM //LIST/ITEM/TAGS @TYPE:JSON LIST:map[ITEM:[map[@id:1 TAGS:map[OTHER:aaaa name:[map[#text:あいうえお @ID:1 @IMPORTANCE:20] map[name:かきくけこ] map[name:さしすせそ]]] TITLE:たいとるなんな UUID:0f164f93-fe33-44d4-8f2a-f94518b7cb51] map[TAGS:map[name:[あああ いいいい ううううう]] TITLE:たいとるなんです UUID:f36ea96f-97a8-438e-8656-ca7365f23df9]]]]]
あれ、map[name:かきくけこ] map[name:さしすせそ] ここがnameでまとまってないバグじゃん・・・
ありえねー---
なんでこんなバグがあるんだー
これやはり、XMLからgoの仮想ファイルシステム作って考えた方がいいかもしれない・・・
*/
ここよ、どうなってんだよ?
マップがnameでまとまってねーんだよ
おそらく途中に<OTHER>挟んだからだよな?
なんでnameでまとまらないの?
もうあれだ、、、疲れたわ、、、
0 件のコメント:
コメントを投稿