gpt4 book ai didi

xml - Golang xml.Unmarshal 任意元素

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

具有任意数量任意命名元素的 XML:

<modules>
<elt1><version>1.2.3</version></elt1>
<eltN><version>4.5.6</version></eltN>
</modules>

如何将 elementname 解析为 map[string]stringversion?我发现的所有 Unmarshall 示例都采用静态元素名称。

最佳答案

您可以使用 xml.Decoder 代替: Example, which severely lacks error handling .

package main

import (
"encoding/xml"
"fmt"
"io"
"strings"
)

func main() {
data := `<modules>
<elt1><version>1.2.3</version></elt1>
<eltN><version>4.5.6</version></eltN>
</modules>`
fmt.Println(parseVersions(strings.NewReader(data)))
}

func parseVersions(s io.Reader) map[string]string {
r := make(map[string]string)
decoder := xml.NewDecoder(s)
for token, err := decoder.Token(); err == nil; token, err = decoder.Token() {
switch v := token.(type) {
case xml.StartElement:
if el := v.Name.Local; strings.HasPrefix(el, "elt") {
r[el] = parseVersion(decoder)
}
}
}
return r
}

func parseVersion(decoder *xml.Decoder) string {
token, _ := decoder.Token()
switch v := token.(type) {
case xml.StartElement:
if v.Name.Local == "version" {
cd, _ := decoder.Token()
return string(cd.(xml.CharData))
}
}
return ""
}

关于xml - Golang xml.Unmarshal 任意元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54405462/

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