gpt4 book ai didi

xml - 使用 Go 解析巨大的 XML 文件

转载 作者:IT王子 更新时间:2023-10-29 00:46:30 24 4
gpt4 key购买 nike

我们需要使用 Go 解析一个巨大的 XML 文件。我们想使用基于 xml.NewDecoder()decoder.Token() 库调用的类似 SAX 事件的算法。我们已经使用 XML 注释创建了适当的结构类型。到目前为止一切都很容易。

现在,我们遍历文件并检测 xml.StartElement 标记。问题来了。我们只需要解码此起始 token 的属性并继续进入其内容。如果我们调用 token.DecodeElement(),整个内容在我们的场景中被“解码”或跳过。

如何只解码特定 StartElement 的属性并继续到元素的主体?

最佳答案

我在 go-wikiparse 中解析维基百科 xml 转储(~50GB xml 文件)使用普通结构/反射解码。非常简单。

策略基本上是这样的:

首先,读取信封 token :

d := xml.NewDecoder(r)
_, err := d.Token()
if err != nil {
return nil, err
}

例如,<someDocument><billions-of-other-things/></someDocument>那会给你一些文件。

然后,您可以在循环中构造解码接下来的内容:

var i item
d.Decode(&i)

RAM 不多,解析起来 super 容易。

关于xml - 使用 Go 解析巨大的 XML 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26756382/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com