如何用Go中的各种元素解析巨大的XML文件?

dan*_*els 5 go

如何解析具有各种元素的巨大XML文件(即不重复多次相同的元素).

例:

<stuff>
    <header>...</header>
    <item>...</item>
    ...
    <item>...</item>
    <something>...</sometihng>
</stuff>
Run Code Online (Sandbox Code Playgroud)

我想在Go中编写一个脚本,允许我将该文件拆分为多个较小的文件,每个文件具有特定数量的标签.有关如何使用Go解析XML的所有示例似乎都依赖于了解文件中的元素.

可以在不知道的情况下解析文件吗?对于XML中的每个元素,无论有什么元素(标题,项目,某些东西等等)都有类似的东西

Cer*_*món 14

使用标准的xml解码器.

调用令牌逐个读取令牌.找到感兴趣的起始元素时,调用DecodeElement将元素解码为Go值.

这是如何使用解码器的草图:

d := xml.NewDecoder(r)
for {
    t, tokenErr := d.Token()
    if tokenErr != nil {
        if tokenErr == io.EOF {
           break
        }
        // handle error
    }
    switch t := t.(type) {
    case xml.StartElement:
        if t.Name.Space == "foo" && t.Name.Local == "bar" {
            var b bar
            if err := d.DecodeElement(&b, &t); err != nil {
                // handle error
            }
            // do something with b
        }
    }
}
Run Code Online (Sandbox Code Playgroud)