使用 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 上试试这个。