gpt4 book ai didi

xml - 在 GO 中解析非标准 XML

转载 作者:数据小太阳 更新时间:2023-10-29 03:44:20 24 4
gpt4 key购买 nike

我有一个 450 万行的 XML 文件,我无法找到使用 decoder.DecodeElement() 函数解析信息的方法。

XML 片段:

<dt
xmlns:directive="d"
xmlns:ref="ref">
<Data>
<directive:Entry Name='abcd'>
<list>
<map>
<directive:Entry Name='id'>
<Integer>21</Integer>
</directive:Entry>
<directive:Entry Name='t'>
<Date>T14:31:43.823Z</Date>
</directive:Entry>
</map>
</list>
</directive:Entry>
</Data>
</dt>

所以以上构成了XML文件的一行。我的目标是提取“t”和“id”。

我目前的尝试涉及创建一个结构:

type DT struct {
id string `xml:"Data"` // This is my attempt to get the entire Data portion/segment/chunk(?)
}

执行实际解码的代码:

decoder := xml.NewDecoder(readInFile())

for {
t, _ := decoder.Token()
if t == nil {
break
}

switch se := t.(type) {
case xml.StartElement:
inE := se.Name.Local

if inE == "dt" {
var dt DT
decoder.DecodeElement(&dt, &se)

fmt.Println(&dt)
}
}
}

上面的代码,运行时输出

&{}

这告诉我无法解析出任何信息。如果我输出

时也是如此
fmt.Println(&dt.id)

有人可以帮助我吗?我不确定我的输出为空的原因是我在结构中提取的方式,还是我的解码问题。

最佳答案

我建议您使用 xml.Unmarshal 而不是 decoder.DecodeElement(),对于 xml.Unmarshal为了能够做你想让它做的事,DT类型的结构必须匹配 <dt>元素的结构遵循记录的规则 here .

例如这样的事情:

type DT struct {
DataEntry struct {
List []EntryMap `xml:"list"`
} `xml:"Data>Entry"`
}

type EntryMap struct {
Entries []Entry `xml:"map>Entry"`
}

type Entry struct {
Name string `xml:",attr"`
Value string `xml:",any"`
}

然后你可以遍历dt.DataEntry.List[N].Entries得到你需要的东西。

https://play.golang.org/p/3XxmYQ4ECza

关于xml - 在 GO 中解析非标准 XML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51616786/

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