我正在Go系统中实现一项服务,该服务从外部SOAP服务读取数据。现在我正在为此编写测试,我遇到了这个问题:
unable to unmarshal request body for testing: expected element type <soapenv:Envelope> but have <Envelope>
如果我转储数据,我将拥有:
<soapenv:Envelope xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope" xmlns:v2 [...]
所以我在XML中确实有正确的名称空间。作为记录,这是我要尝试将数据解组的结构:
type collectRequestXML struct {
XMLName xml.Name `xml:"soapenv:Envelope"`
SoapEnv string `xml:"xmlns:soapenv,attr"`
XMLNs string `xml:"xmlns:v2,attr"`
Header struct{} `xml:"soapenv:Header"`
Body struct {
[...]
}
}
我该怎么做才能使解组失败?
答案 0 :(得分:1)
XML软件包的文档对名称空间的描述不够。解析非常简单。对命名空间的支持很小。它可以解析XML,但是当您创建XML ist时,它对名称空间的支持还不够。
当您删除XMLName
定义内的名称空间信息时,您的结构有效:
type myStruct struct {
XMLName xml.Name `xml:"Envelope"`
SoapEnv string `xml:"xmlns:soapenv,attr"`
Header struct{} `xml:"soapenv:Header"`
Body struct {
MyData string `xml:"my-data"`
}
}