drd2551 2019-03-25 12:11
浏览 249

Golang XML:解组忽略名称空间

I'm implementing a service in our Go system that reads data from an external SOAP service. Now that I'm writing tests for it, I run into this issue:

unable to unmarshal request body for testing: expected element type <soapenv:Envelope> but have <Envelope>

If I dump my data, I have this:

<soapenv:Envelope xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope" xmlns:v2 [...]

So I do have the correct namespace in the XML. For the record, this is the struct into which I'm trying to unmarshal the data:

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 {
        [...]
    }
}

What can I do to make the unmarshal fail?

See this Playground item for reference.

  • 写回答

1条回答 默认 最新

  • douming4359 2019-03-25 14:01
    关注

    The documentation of the XML package does not write enough about the namespaces. The parsing is very simple. There is a small support for the namespaces. It can parse the XML, but when you create XML ist does not support the namespace thing enough.

    Your struct works, when you remove the namespace information inside the XMLName definition:

    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"`
        }
    }
    

    https://play.golang.org/p/UppXwx0X0i9

    评论

报告相同问题?

悬赏问题

  • ¥20 测距传感器数据手册i2c
  • ¥15 RPA正常跑,cmd输入cookies跑不出来
  • ¥15 求帮我调试一下freefem代码
  • ¥15 matlab代码解决,怎么运行
  • ¥15 R语言Rstudio突然无法启动
  • ¥15 关于#matlab#的问题:提取2个图像的变量作为另外一个图像像元的移动量,计算新的位置创建新的图像并提取第二个图像的变量到新的图像
  • ¥15 改算法,照着压缩包里边,参考其他代码封装的格式 写到main函数里
  • ¥15 用windows做服务的同志有吗
  • ¥60 求一个简单的网页(标签-安全|关键词-上传)
  • ¥35 lstm时间序列共享单车预测,loss值优化,参数优化算法