使用 Go 解析 XML 无法从单个标记中获取值
Parsing XML with Go not able to get value from single tag
这是我第一次尝试使用 Go 的 xml 包,所以我想我遗漏了一些东西。我有一个来自遗留网络服务的简单 XML:
<?xml version="1.0" encoding="utf-8"?>
<boolean xmlns="http://foo.com.BARRSD/">true</boolean>
我首先尝试定义此结构以与 xml.Unmarshal 方法一起使用:
type Authenticate struct {
Boolean bool `xml:"boolean"`
}
但我相信它无法“找到”布尔值,因此布尔值的结果值是 false 的初始值。我通过将 Boolean 重新定义为字符串来理智地检查情况是否如此,这只会导致一个空字符串。如果我进一步简化源 XML,我会得到相同的结果:
<boolean>true</boolean>
如何使用 xml.Unmarshal 解析单个标签的值?
问题是您的 Go 模型与 XML 结构不匹配。你的 Go 模型假设有一个“authenticate”包装标签,它会匹配这个 XML:
<authenticate>
<boolean xmlns="http://foo.com.BARRSD/">true</boolean>
</authenticate>
在 Go Playground 上试用。
由于您没有包装标签,您可以使用 ,chardata
XML 标签选项来使用 Boolean
字段的内部文本:
type Authenticate struct {
Boolean bool `xml:",chardata"`
}
在 Go Playground 上试用。
另请注意,在此特定示例中,您还可以使用单个 bool
变量:
var b bool
if err := xml.Unmarshal([]byte(src), &b); err != nil {
panic(err)
}
在 Go Playground 上试试这个。
这是我第一次尝试使用 Go 的 xml 包,所以我想我遗漏了一些东西。我有一个来自遗留网络服务的简单 XML:
<?xml version="1.0" encoding="utf-8"?>
<boolean xmlns="http://foo.com.BARRSD/">true</boolean>
我首先尝试定义此结构以与 xml.Unmarshal 方法一起使用:
type Authenticate struct {
Boolean bool `xml:"boolean"`
}
但我相信它无法“找到”布尔值,因此布尔值的结果值是 false 的初始值。我通过将 Boolean 重新定义为字符串来理智地检查情况是否如此,这只会导致一个空字符串。如果我进一步简化源 XML,我会得到相同的结果:
<boolean>true</boolean>
如何使用 xml.Unmarshal 解析单个标签的值?
问题是您的 Go 模型与 XML 结构不匹配。你的 Go 模型假设有一个“authenticate”包装标签,它会匹配这个 XML:
<authenticate>
<boolean xmlns="http://foo.com.BARRSD/">true</boolean>
</authenticate>
在 Go Playground 上试用。
由于您没有包装标签,您可以使用 ,chardata
XML 标签选项来使用 Boolean
字段的内部文本:
type Authenticate struct {
Boolean bool `xml:",chardata"`
}
在 Go Playground 上试用。
另请注意,在此特定示例中,您还可以使用单个 bool
变量:
var b bool
if err := xml.Unmarshal([]byte(src), &b); err != nil {
panic(err)
}
在 Go Playground 上试试这个。