为了账号安全,请及时绑定邮箱和手机立即绑定

带有重复标签的 xml 解析

带有重复标签的 xml 解析

Go
慕尼黑8549860 2021-12-13 10:36:16
当 xml 提要在一个结构中有多个标签时,我在解析它时遇到问题:<feed><entry>::</entry><entry>::</entry></feed>在这种情况下,我通过定义 [] 条目的数组来解析条目没有问题,但是其中一个条目是地理编码标记,其 valuename 和 value 标记重复两次。在这种情况下如何定义结构。?<geocode><valueName>abc</valueName><value>a1</value><valueName>def</valueName><value>d1</value></geocode>这是我在https://play.golang.org/p/SE8RXTNbYl 上遇到问题的 go 程序
查看完整描述

1 回答

?
翻过高山走不出你

TA贡献1875条经验 获得超3个赞

如果您在同一个父标签下有多个同名标签,您总是可以使用一个切片来保存所有出现的标签,无论它们是彼此相邻枚举还是在它们之间有其他标签。


完整地说,这是您要解析的 XML 片段:


<cap:geocode>

    <valueName>FIPS6</valueName>

    <value>002090 002290</value>

    <valueName>UGC</valueName>

    <value>AKZ222</value>

</cap:geocode>

所以简单地改变你的geocode结构:


type geocode struct {

    ValueName1 string `xml:"valueName"`

    Value1     string `xml:"value"`

    ValueName2 string `xml:"valueName"`

    Value2     string `xml:"value"`

}

对此:


type geocode struct {

    ValueNames []string `xml:"valueName"`

    Values     []string `xml:"value"`

}

以及打印它们的代码:


gc := v.Entries[0].Geocode

log.Println(len(gc.Values))

log.Println(gc.ValueNames)

log.Println(gc.Values)

for i := range gc.Values {

    fmt.Printf("ValueName=%s, Value=%s\n", gc.ValueNames[i], gc.Values[i])

}

输出(在Go Playground上尝试修改后的源):


2009/11/10 23:00:00 2

2009/11/10 23:00:00 [FIPS6 UGC]

2009/11/10 23:00:00 [002090 002290 AKZ222]

ValueName=FIPS6, Value=002090 002290

ValueName=UGC, Value=AKZ222


查看完整回答
反对 回复 2021-12-13
  • 1 回答
  • 0 关注
  • 427 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信