转到1.9.2版,请参见以下代码:
package main
import (
"fmt"
"encoding/xml")
type DeviceId struct {
XMLName xml.Name `xml:"DeviceId"`
Manufacturer string `xml:"Manufacturer"`
OUI string `xml:"OUI"`
ProductClass string `xml:"ProductClass"`
SerialNumber string `xml:"SerialNumber"`
}
type CwmpInform struct {
XMLName xml.Name `xml:"cwmp:Inform"`
DeviceId DeviceId
}
func main() {
rq := new(CwmpInform)
data := `<cwmp:Inform>
<DeviceId>
<Manufacturer></Manufacturer>
<OUI>48BF74</OUI>
<ProductClass>FAP</ProductClass>
<SerialNumber>1202000042177AP0008</SerialNumber>
</DeviceId>
</cwmp:Inform>`
xml.Unmarshal([]byte (data), rq)
fmt.Printf("Unmarshelled Content:%v", rq)
output, err := xml.MarshalIndent(rq," ", " ")
if err != nil{
fmt.Printf("error : %v", err)
}
fmt.Printf("Marshelled Content: %s\n", string(output))
}
上面程序的输出,其中包含适当的编组内容和空白的带壳内容:
Unmarshelled Content:&{{ } {{ } }}
Marshelled Content:
<cwmp:Inform>
<DeviceId>
<Manufacturer></Manufacturer>
<OUI></OUI>
<ProductClass></ProductClass>
<SerialNumber></SerialNumber>
</DeviceId>
</cwmp:Inform>
但是当我与结构的XML标签从改变xml:"cwmp:Inform"
到xml:"cwmp Inform"
,然后Unmarshelling情况正常,但我得到下面的Marshelled内容输出:
<Inform xmlns="cwmp">
<DeviceId>
<Manufacturer></Manufacturer>
<OUI>48BF74</OUI>
<ProductClass>FAP</ProductClass>
<SerialNumber>1202000042177AP0008</SerialNumber>
</DeviceId>
</Inform>
<cwmp:Inform>
我没有得到,而是得到了<Inform xmlns="cwmp">
这里可能是相同的问题
https://github.com/golang/go/issues/9519
要解决此问题,您需要使用两种结构,一种用于解组数据,第二种用于编组数据
type CwmpInformUnmarshal struct {
XMLName xml.Name `xml:"Inform"`
DeviceId DeviceId
}
type CwmpInformMarshall struct {
XMLName xml.Name `xml:"cwmp:Inform"`
DeviceId DeviceId
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句