Golang中XML序列化问题解决方案
Golang中XML序列化问题解决方案 以下是我的代码。为什么在我的情况下 XML 标签不起作用? 注释中展示了 XML 应有的格式
谢谢!
package main
import (
"encoding/xml"
"fmt"
"os"
)
type SmsXML struct {
XMLName xml.Name `xml: "Packet"`
ID int `xml: "Header>ID"`
Content string `xml: "Body>Item>Content"`
PhoneNo string `xml: "Body>Item>Phone_no"`
Content1 string `xml: "Body>Item>Content"`
OriginAddress string `xml: "Body>Item>OriginAddress"`
}
/*
<Packet>
<Header>
<ID>2342353456465</ID>
</Header>
<Body>
<Item>
<Content>SMS</Content>
<Phone_no>+123123213</Phone_no>
<Content>test</Content>
<OriginAddress>sender</OriginAddress>
</Item>
</Body>
</Packet>
*/
func main() {
Send()
}
func Send() {
data := SmsXML{ID: 213, Content: "SMS", PhoneNo: "+12321321331", Content1: "testNumberOne", OriginAddress: "Sender"}
output, err := xml.Marshal(data)
if err != nil {
fmt.Println("xmlError: ", err)
}
os.Stdout.Write(output)
}
更多关于Golang中XML序列化问题解决方案的实战教程也可以访问 https://www.itying.com/category-94-b0.html
2 回复
我明白了!问题出在结构体中"xml:"标签后面的空格。
type Example struct {
Field string `xml: "field"` // 这里有额外的空格
}
正确的写法应该是:
type Example struct {
Field string `xml:"field"` // 移除空格
}
更多关于Golang中XML序列化问题解决方案的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
问题在于XML标签定义中的空格和转义字符使用不正确。在结构体标签中,xml:后面不应有空格,且>应该直接写成>。
以下是修正后的代码:
package main
import (
"encoding/xml"
"fmt"
"os"
)
type SmsXML struct {
XMLName xml.Name `xml:"Packet"`
ID int `xml:"Header>ID"`
Content string `xml:"Body>Item>Content"`
PhoneNo string `xml:"Body>Item>Phone_no"`
Content1 string `xml:"Body>Item>Content"`
OriginAddress string `xml:"Body>Item>OriginAddress"`
}
/*
<Packet>
<Header>
<ID>2342353456465</ID>
</Header>
<Body>
<Item>
<Content>SMS</Content>
<Phone_no>+123123213</Phone_no>
<Content>test</Content>
<OriginAddress>sender</OriginAddress>
</Item>
</Body>
</Packet>
*/
func main() {
Send()
}
func Send() {
data := SmsXML{
ID: 213,
Content: "SMS",
PhoneNo: "+12321321331",
Content1: "testNumberOne",
OriginAddress: "Sender",
}
output, err := xml.MarshalIndent(data, "", " ")
if err != nil {
fmt.Println("xmlError: ", err)
return
}
os.Stdout.Write(output)
}
主要修改:
- 移除了结构体标签中
xml:后面的空格 - 将
>改为> - 使用
xml.MarshalIndent来获得格式化的输出,便于查看结果 - 在错误处理中添加了
return语句
运行修正后的代码将生成正确的XML格式:
<Packet>
<Header>
<ID>213</ID>
</Header>
<Body>
<Item>
<Content>SMS</Content>
<Phone_no>+12321321331</Phone_no>
<Content>testNumberOne</Content>
<OriginAddress>Sender</OriginAddress>
</Item>
</Body>
</Packet>

