gpt4 book ai didi

xml - 戈朗 : Unmarshal Self Closing Tags

转载 作者:IT王子 更新时间:2023-10-29 00:35:26 32 4
gpt4 key购买 nike

因此,我正在尝试解码由 Google Go 中的另一个程序作为保存文件生成的 XML 文件。它似乎进展顺利,因为这方面的文档非常广泛:http://golang.org/pkg/encoding/xml/#Unmarshal

我还是遇到了问题。保存文件中的输出是这样的:

<location id="id4" x="-736" y="-544">
<committed />
</location>

一个位置也可以是紧急的或两者都不是,而不是 promise 。这些位置也可以有一个名称和不同的标签,但这些似乎解析得很好。在我的 Go 代码中,我使用了以下结构:

type Location struct {
Id string `xml:"id,attr"`
Committed bool `xml:"commited"`
Urgent bool `xml:"urgent"`
Labels []Label `xml:"label"`
}

虽然 encoding/xml 包的 Unmarshal 函数运行没有错误并且数据中存在所示示例,但 committed 和 urgent 的所有值都是“false”。

我应该更改什么以获得这两个字段的正确值?

(解码使用以下代码完成)

xmlFile, err := os.Open("model.xml")
if err != nil {
fmt.Println("Error opening file:", err)
return
}
defer xmlFile.Close()

b, _ := ioutil.ReadAll(xmlFile)

var xmlScheme uppaal.UppaalXML
err = xml.Unmarshal(b, &xmlScheme)
fmt.Println(err)

最佳答案

根据 this discussion,此行为不受支持,您没有看到错误的唯一原因是您在结构定义中拼错了 committed。如果你写得正确,你会得到一个解析错误,因为空字符串(封闭标签的内容)不是 bool 值(example on play)。

在链接的 golang-nuts 线程中,rsc 建议使用 *struct{}(指向空结构的指针)并检查该值是否为 nil (example on play) :

type Location struct {
Id string `xml:"id,attr"`
Committed *struct{} `xml:"committed"`
Urgent bool `xml:"urgent"`
}

if l.Committed != nil {
// handle not committed
}

关于xml - 戈朗 : Unmarshal Self Closing Tags,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23724591/

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