go的結構體轉換爲xml格式


本次遇到的問題是我需要將一堆的鍵值對轉換爲xml格式,作爲body去請求url

interface{}類型轉換爲xml格式

1.第一種方法

// 定義一個user結構體
type User struct {
	Name string `xml:"name,omitempty"`
	Age int `xml:"age,omitempty"`
}

// 定義一個Blog結構體
type Blog struct {
	Title string `xml:"title,omitempty"`
	Content string `xml:"content,omitempty"`
}

// 在Request結構體中包含上面兩個結構體
type Request struct {
	User
	Blog
}

// 新建一個user
user := &User{Name: "張三", Age: 23}

// 將user放到Request結構體中,在結構體的字段中都添加omitempty,在顯示的時候就會只顯示有值的,無值的就不會顯示了,返回值中的<Request>...</Request>是結構體的名字
request := &Request{User: *user}
result, _ := xml.Marshal(request)
fmt.Println(string(result))  // <Request><name>張三</name><age>23</age></Request>

2. 第二種方法

type User struct {
		XMLName   xml.Name `xml:"Request"`
		Name string `xml:"name,omitempty"`
		Age int `xml:"age,omitempty"`
	}

	type Blog struct {
		// 定義類型爲xml.Name就不會使用結構體的名字<Blog>,而是自定義的<Request> 
		XMLName   xml.Name `xml:"Request"`
		Title string `xml:"title,omitempty"`
		// content>再來 生成的xml是這樣的<content><再來>人之初,性本善</再來></content>,類似於標籤套標籤
		Content string `xml:"content>再來,omitempty"`
	}


	user := &User{Name: "張三", Age: 23}

	g, _ := xml.Marshal(user)
	fmt.Println(string(g))

	blog := &Blog{Title: "三字經", Content: "人之初,性本善"}
	result, _ := xml.Marshal(blog)
	fmt.Println(string(result))  // <Request><title>三字經</title><content>人之初,性本善</content></Request>

3. 格式化的xml

上述的生成的xml實在是對閱讀太不友好,換一個函數試試
xml.MarshalIndent(v interface{}, prefix, indent string)

type Blog struct {
		XMLName   xml.Name `xml:"Request"`
		Title string `xml:"title,omitempty"`
		Content string `xml:"content>再來,omitempty"`
	}

	blog := &Blog{Title: "三字經", Content: "人之初,性本善"}
	result, _ := xml.MarshalIndent(blog, "", "    ")
	fmt.Println(string(result))
//<Request>
//    <title>三字經</title>
//    <content>
//        <再來>人之初,性本善</再來>
//    </content>
//</Request>	
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章