Skip to content

XML编码处理

结构体 -> 字节数组 字节数组 -> 结构体

graph LR
  A[结构体] -->|序列化| B{字节数组};
  C[字节数组] -->|反序列化| D{结构体};

struct对象的序列化与反序列化

package main

import (
    "encoding/xml"
    "fmt"
)

type Person struct {
    Name string `xml:"name,attr"`
    Age  int
}

func main() {
    p := Person{Name: "弹力笔记", Age: 1}

    // Marshal 直接序列化
    // if data, err := xml.Marshal(p); err != nil {

    // MarshalIndent 序列化美化 MarshalIndent(结构体, 前缀, 缩进)
    if data, err := xml.MarshalIndent(p, "", " "); err != nil {
        fmt.Println(err)
        return
    } else {
        fmt.Println(data)
        fmt.Println(string(data))

        p2 := new(Person)

        if err = xml.Unmarshal(data, p2); err != nil {
            fmt.Println(err)
            return
        }

        fmt.Println(p2)

    }
}


// 输出
MacintoshdeMacBook-Pro-139:xml elasticnotes$ go run struct.go 
[60 80 101 114 115 111 110 32 110 97 109 101 61 34 229 188 185 229 138 155 231 172 148 232 174 176 34 62 10 32 60 65 103 101 62 49 60 47 65 103 101 62 10 60 47 80 101 114 115 111 110 62]
<Person name="弹力笔记">
 <Age>1</Age>
</Person>
&{弹力笔记 1}