Sid*_*ath 8 xml xml-namespaces go
转到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))
}
Run Code Online (Sandbox Code Playgroud)
上面程序的输出,其中包含适当的编组内容和空白的带壳内容:
Unmarshelled Content:&{{ } {{ } }}
Marshelled Content:
<cwmp:Inform>
<DeviceId>
<Manufacturer></Manufacturer>
<OUI></OUI>
<ProductClass></ProductClass>
<SerialNumber></SerialNumber>
</DeviceId>
</cwmp:Inform>
Run Code Online (Sandbox Code Playgroud)
但是当我与结构的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>
Run Code Online (Sandbox Code Playgroud)
<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
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2146 次 |
| 最近记录: |