Lea*_*nGo 4 xml struct go slice
当xml feed在结构中具有多个标签时,我在解析它时会遇到问题:
<feed>
<entry>
:
:
</entry>
<entry>
:
:
</entry>
</feed>
Run Code Online (Sandbox Code Playgroud)
在这种情况下,通过定义[]条目数组来解析条目没有问题。但是,条目之一是一个地理编码标记,该标记具有valuename和value标记重复两次。在这种情况下如何定义结构?
<geocode>
<valueName>abc</valueName>
<value>a1</value>
<valueName>def</valueName>
<value>d1</value>
</geocode>
Run Code Online (Sandbox Code Playgroud)
这是我遇到https://play.golang.org/p/SE8RXTNbYl问题的go程序
如果在同一个父标记下有多个具有相同名称的标记,则始终可以使用一个切片来保存所有出现的标记,而不管它们是相邻枚举还是在它们之间还有其他标记。
为了完整起见,这是您要解析的XML片段:
<cap:geocode>
<valueName>FIPS6</valueName>
<value>002090 002290</value>
<valueName>UGC</valueName>
<value>AKZ222</value>
</cap:geocode>
Run Code Online (Sandbox Code Playgroud)
因此,只需更改您的geocode结构:
type geocode struct {
ValueName1 string `xml:"valueName"`
Value1 string `xml:"value"`
ValueName2 string `xml:"valueName"`
Value2 string `xml:"value"`
}
Run Code Online (Sandbox Code Playgroud)
对此:
type geocode struct {
ValueNames []string `xml:"valueName"`
Values []string `xml:"value"`
}
Run Code Online (Sandbox Code Playgroud)
和代码来打印它们:
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])
}
Run Code Online (Sandbox Code Playgroud)
输出(在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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
618 次 |
| 最近记录: |