gpt4 book ai didi

xml - 在 Golang 中解析递归 XML

转载 作者:行者123 更新时间:2023-12-04 13:08:18 27 4
gpt4 key购买 nike

我正在尝试解析一个(有点)类似于以下内容的 XML -(请记住,实际文档有许多其他我能够成功解析的标签。)

<process name="p" id="1234">
<app>
<element name="ele-1">
<id>84594</id>
<element name="ele-11">
<id>95065</id>
<element name="ele-111">
<id>5065</id>
</element> //ele-111
</element> //ele-11
<element name="ele-12">
<id>4954</id>
</element> //ele-12
</element>//ele-1
</app>
.
.
.
//Many other tags here which are working fine
</process>

我添加了 ele-# 以便很容易看出从哪里开始和从哪里结束。一旦我们低于最顶部的元素 (ele-1),此嵌套元素可以到达任意深度。

这意味着 ele-1 将有一个嵌套元素列表,它们中的每一个都可能有也可能没有嵌套元素列表,然后它们中的每一个都可能有也可能没有......

我想在 Go 中解析这个结构。什么是最好的方法?

我定义了这样的东西

type ProcessDef struct {
Process xml.Name `xml:"process"`
Name string `xml:"name,attr"`
Id string `xml:"id,attr"`
App AppDef `xml:"app"`
}

type AppDef struct {
App xml.Name `xml:"app"`
Elements []ElementDef `xml:"element"`
}

type ElementDef struct {
Element xml.Name `xml:"element"`
Name string `xml:"name,attr"`
Id string `xml:"id"`
Elements []ElementDef
}

尽管在我解析 XML 后它会读取并填充 AppDef 结构中第一个(顶级)元素的值,但我无法使用 ElementDef 中的嵌套递归定义来解析和获取所有子元素的值结构。

此外,当我尝试在 ElementDef 结构的 slice 字段中添加 xml 注释时,就像这样 - Elements []ElementDef xml:"element " 我收到警告 struct field Elements repeats xml tag "element"

我对如何在 Go 中以最好的方式解析这样的 XML 文档有点迷茫。

最佳答案

您可以从 ElementDef 中删除 xml.Name 并将 xml:"element" 标记添加到 Elements 字段。

type ElementDef struct {
Name string `xml:"name,attr"`
Id string `xml:"id"`
Elements []ElementDef `xml:"element"`
}

https://play.golang.org/p/SeQBRS_rdhf

或者,您也可以保留 xml.Name 字段,删除标记,然后将其重命名为 XMLName。作为docs state: “如果该结构有一个名称为 XMLName 的字段,Unmarshal 会记录该字段中的元素名称。”

type ElementDef struct {
XMLName xml.Name
Name string `xml:"name,attr"`
Id string `xml:"id"`
Elements []ElementDef `xml:"element"`
}

https://play.golang.org/p/WUo1GNYa2t0

关于xml - 在 Golang 中解析递归 XML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68335342/

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