我有这个XML,例如:
> aggregate(. ~ Species, data = iris, mean)
Species Sepal.Length Sepal.Width Petal.Length Petal.Width
1 setosa 5.006 3.428 1.462 0.246
2 versicolor 5.936 2.770 4.260 1.326
3 virginica 6.588 2.974 5.552 2.026
> aggregate(. ~ Species, data = iris, median)
Species Sepal.Length Sepal.Width Petal.Length Petal.Width
1 setosa 5.0 3.4 1.50 0.2
2 versicolor 5.9 2.8 4.35 1.3
3 virginica 6.5 3.0 5.55 2.0
我正在用encode / xml解析它:
<Report>
...
<ElementOne Blah="bleh">
<IgnoreElement>
<Foo>
...
</Foo>
</IgnoreElement>
<WantThisElement>
<Bar Baz="test">
...
</Bar>
<Bar Baz="test2">
...
</Bar>
</WantThisElement>
</ElementOne>
...
</Report>
我不确定这是否是最佳方式,我不知道解码器.DecodeElement(...)是否忽略了我不想要的嵌套元素解析。我想以较低的内存成本提高性能。解析这些巨大的XML文件的最佳方法是什么?
答案 0 :(得分:1)
通常最好将XML解码器用于大型XML,它使用流和Go选择性绑定(如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>
结构:
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"`
}