如何在忽略嵌套元素的情况下解析巨大的xml?
我有这样的XML,例如:如何在忽略嵌套元素的情况下解析巨大的xml?,xml,go,xml-parsing,Xml,Go,Xml Parsing,我有这样的XML,例如: <Report> ... <ElementOne Blah="bleh"> <IgnoreElement> <Foo> ... </Foo> </IgnoreElement> <
<Report>
...
<ElementOne Blah="bleh">
<IgnoreElement>
<Foo>
...
</Foo>
</IgnoreElement>
<WantThisElement>
<Bar Baz="test">
...
</Bar>
<Bar Baz="test2">
...
</Bar>
</WantThisElement>
</ElementOne>
...
</Report>
我不确定这是否是最好的方法,我不知道解码器。解码元素。。。忽略我不想分析的嵌套元素。我想以低内存成本提高性能。解析这些巨大的XML文件的最佳方法是什么?通常最好对大型XML使用XML解码器,它使用流并使用选择性绑定,如WantThisElement>Bar,然后XML解码器遵循该路径 让我们使用问题中的XML内容创建一个示例 XML内容:
<Report>
<ElementOne Blah="bleh">
<IgnoreElement>
<Foo>
<FooValue>example foo value</FooValue>
</Foo>
</IgnoreElement>
<WantThisElement>
<Bar Baz="test">
<BarValue>example bar value 1</BarValue>
</Bar>
<Bar Baz="test2">
<BarValue>example bar value 2</BarValue>
</Bar>
</WantThisElement>
</ElementOne>
</Report>
播放链接:通常最好对大型XML使用XML解码器,它使用流并使用选择性绑定,如WANTthiseelement>Bar,然后XML解码器遵循该路径 让我们使用问题中的XML内容创建一个示例 XML内容:
<Report>
<ElementOne Blah="bleh">
<IgnoreElement>
<Foo>
<FooValue>example foo value</FooValue>
</Foo>
</IgnoreElement>
<WantThisElement>
<Bar Baz="test">
<BarValue>example bar value 1</BarValue>
</Bar>
<Bar Baz="test2">
<BarValue>example bar value 2</BarValue>
</Bar>
</WantThisElement>
</ElementOne>
</Report>
播放链接:通常,将大型xml解析为流的最佳方法是使用xml.Decoder和Token/RawToken函数。这相当于大量的代码,但是如果你有,比如说wikipedia转储的5GB XML流,效率会更高。是的,我看过一篇文章:这解释了这一点,但在这种情况下,元素很小,没有那么多被忽略的元素。在我的例子中,IgnoreElement非常大,我想知道xml.Decoder是否能够很好地完成这项工作。即使IgnoreElement很大,您也可以通过输入进行处理,直到最终获得结束标记标记。但是当我调用DecodeElement时,我使用ElementOne作为起始元素,因为我需要Blah属性。我认为在这种情况下,DecodeElement就像解组器一般,将大型xml解析为流的最佳方法是使用xml.Decoder和Token/RawToken函数。这相当于大量的代码,但是如果你有,比如说wikipedia转储的5GB XML流,效率会更高。是的,我看过一篇文章:这解释了这一点,但在这种情况下,元素很小,没有那么多被忽略的元素。在我的例子中,IgnoreElement非常大,我想知道xml.Decoder是否能够很好地完成这项工作。即使IgnoreElement很大,您也可以通过输入进行处理,直到最终获得结束标记标记。但是当我调用DecodeElement时,我使用ElementOne作为起始元素,因为我需要Blah属性。我认为在这种情况下,decodelement就像解组一样,对于大型XML,解组速度不是很慢吗?使用DecodeElement有什么好处?我已经更新了链接,很抱歉之前的链接不正确。对于大型XML,解组不是很慢吗?使用DecodeElement有什么好处?我已经更新了链接,很抱歉之前的链接不正确。
type Report struct {
XMLName xml.Name `xml:"Report"`
ElementOne ElementOne
}
type ElementOne struct {
XMLName xml.Name `xml:"ElementOne"`
Blah string `xml:"Blah,attr"`
Bar []Bar `xml:"WantThisElement>Bar"`
}
type Bar struct {
XMLName xml.Name `xml:"Bar"`
Baz string `xml:"Baz,attr"`
BarValue string `xml:"BarValue"`
}