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)
}

主要修改:

  1. 移除了结构体标签中xml:后面的空格
  2. &gt;改为>
  3. 使用xml.MarshalIndent来获得格式化的输出,便于查看结果
  4. 在错误处理中添加了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>
回到顶部