XML tag ที่มี attribute และ data

เนื่องจากตอนทำงาน ที่ต้องยิง soap (ทำไมนะ) ทำให้ต้องเจอ xml หลายแบบที่ต้องนำมาสร้าง struct ไว้สำหรับ mashal

หนึ่งใน xml หน้าตาที่ไม่ปกติ(สำหรับผม) คือแบบนี้

 

<Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">1234IloveU</Password>

เผื่อว่าจะมีคนต้องใช้งานแบบนี้เหมือนกัน เลยอยากแบ่งปันให้นำไปใช้ครับ

package main

import (
	"encoding/xml"
	"fmt"
	"log"
)

type Password struct {
	Type string `xml:"Type,attr"`
	Data string `xml:",chardata"`
}

func main() {
	password := Password{
		Type: "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText",
		Data: "1234IloveU",
	}
	b, err := xml.Marshal(&password)
	if err != nil {
		log.Fatal(err)
	}

	fmt.Println(string(b))
}

นี่คือตัวอย่าง struct ที่สร้างขึ้น โดยเมื่อ Marshal แล้วมันจะไม่นำ Data ไปสร้าง child tag ตามปกติ

เพราะเราติด tag “,chardata” เอาไว้ข้างหลังครับ

ทดลองเล่นได้ที่ http://play.golang.org/p/xT8wXovXhR