我有這樣的XML,例如:如何在GO中解析巨大的XML忽略嵌套元素?
<Report>
...
<ElementOne Blah="bleh">
<IgnoreElement>
<Foo>
...
</Foo>
</IgnoreElement>
<WantThisElement>
<Bar Baz="test">
...
</Bar>
<Bar Baz="test2">
...
</Bar>
</WantThisElement>
</ElementOne>
...
</Report>
而且我解析這個與編碼/ XML:
...
decoder := xml.NewDecoder(resp.Body)
Mystruct := MyStruct{}
for {
t, _ := decoder.Token()
if t == nil {
break
}
switch se := t.(type) {
case xml.StartElement:
if se.Name.Local == "ElementOne" {
decoder.DecodeElement(&Mystruct, &se)
}
}
...
type MyStruct struct{
Blah string
Bar []Bar
}
type Bar struct{
Baz string
...
}
我不知道這是否是做的最好的方式我不知道decode.DecodeElement(...)是否忽略了我不想分析的嵌套元素。我想以低內存成本提高性能。什麼是解析這些巨大的XML文件的最佳方式?
一般解析大個XML作爲數據流是使用'xml.Decoder'的最佳途徑,令牌/ RawToken功能。它相當於很多代碼,但如果你有,比如來自維基百科轉儲的5GB XML流,效率會更高。 –
是的,我看到的一篇文章:http://blog.davidsingleton.org/parsing-huge-xml-files-with-go/解釋這一點,但在這種情況下,元素小,沒有那麼多忽略元素。在我的情況下,IgnoreElement非常龐大,我想知道xml.Decoder是否可以做到這一點。 –
Vivi
即使'IgnoreElement'很大,你可以通過輸入燃燒,直到你終於結束標記令牌。 – RayfenWindspear