我有一个小struct
我希望使用encoding/xml
包进行编组和解组:
type Point struct {
X, Y int
z int // unexported
Names []string
}
当我使用encoding/json
包时,编码/解码工作正常。
但是当我使用encoding/xml
包时,只有xml.Marshal()
有效,xml.Unmarshal()
会返回错误:
invalid character '<' looking for beginning of value
这就是我为XML做的方式:
p := Point{1, 2, 3, []string{"Bob", "Alice"}}
data, err := xml.Marshal(p)
if err != nil {
fmt.Println("Error:", err)
}
fmt.Println("XML:", string(data))
var pXml Point
err = json.Unmarshal(data, &pXml)
if err != nil {
fmt.Println("Error:", err)
}
fmt.Println("Unmarshalled XML:", pXml)
为什么我会收到此错误?如何解组xml.Marshal()
返回的XML输出?
以下是Go Playground上试用的完整,可运行的应用程序。
应用程序的输出:
Input: {1 2 3 [Bob Alice]}
JSON: {"X":1,"Y":2,"Names":["Bob","Alice"]}
Unmarshalled JSON: {1 2 0 [Bob Alice]}
XML: <Point><X>1</X><Y>2</Y><Names>Bob</Names><Names>Alice</Names></Point>
Error: invalid character '<' looking for beginning of value
Unmarshalled XML: {0 0 0 []}
答案 0 :(得分:3)
您正在尝试解析XML,就好像它是JSON一样。首先你做
data, err := xml.Marshal(p)
然后
err = json.Unmarshal(data, &pXml)
代码中的第46行应为
err = xml.Unmarshal(data, &pXml)