对于我的一个项目,我必须处理2GB以上的XML文件。我想存储数据mongoDB。我决定尝试使用Go语言。但是我很难在Go中找出最好的方法。
我已经看到了很多具有固定XML结构的示例,但是我得到的数据结构是动态的,因此使用某种预定义的结构对我不起作用。
现在,我偶然发现了这个软件包:https://github.com/basgys/goxml2json,它看起来非常有前途,但是有些事情我没有得到:
我认为这是一个很好的说法,我只需要将XML数据转换一次为其JSON格式,就可以将其存储在mongoDB中。
你们中的一些人对如何使用Go将XML文件有效地解析为JSON有想法吗?
答案 0 :(得分:0)
Go提供了一个builtin XML stream parser at encoding/xml.Decoder
。
一种典型的用法模式是读取令牌,直到找到感兴趣的内容,然后将令牌解组为XML标记的结构,然后相应地处理该数据。这样,您只需将单个XML令牌或所需的内容加载到内存中,即可解组一些有趣的数据。
例如(Go Playground):
d := xml.NewDecoder(xmlStream)
for {
// Decode the next token from the stream...
token, err := d.Token()
if err == io.EOF {
break
}
check(err)
// Switch behavior based on the token type.
switch el := token.(type) {
case xml.StartElement:
// Handle "person" start elements by unmarshaling from XML...
if el.Name.Local == "person" {
var p Person
err := d.DecodeElement(&p, &el)
check(err)
// ...then marshal to JSON...
jsonbytes, err := json.Marshal(p)
check(err)
// ...then take other action (e.g. insert into database).
fmt.Printf("OK: %s\n", string(jsonbytes))
// OK: {"Id":"123","Name":"Alice","Age":30}
}
}
}