首页 > 解决方案 > 使用 to 将大型 XML 文件转换为 JSON 以存储在 MongoDB 中

问题描述

对于我的一个项目,我必须处理超过 2GB 的 XML 文件。我想存储数据 mongoDB。我决定尝试使用 Go 语言。但是我在找出在 Go 中执行此操作的最佳方法时遇到了一些麻烦。

我见过很多具有固定 XML 结构的示例,但我得到的数据结构是动态的,所以使用某种预定义的结构对我来说是行不通的。

现在我偶然发现了这个包:https ://github.com/basgys/goxml2json看起来很有希望,但有一些我没有得到:

我认为说得好,我只需要将 XML 数据转换一次即可转换为 JSON 格式,这样我就可以将其存储在 mongoDB 中。

你们中的一些人对如何使用 Go 将 XML 文件有效地解析为 JSON 有一些想法吗?

标签: jsonxmlmongodbparsinggo

解决方案


Goencoding/xml.Decoder.

一个典型的使用模式是读取标记,直到您找到感兴趣的东西,然后将标记解组为 XML 标记结构,然后相应地处理该数据。这样,您只需将单个 XML 令牌所需的内容加载到内存中,或者解组一些有趣的数据。

例如(去游乐场):

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}
    }
  }
}

推荐阅读