golangのxml.Marshalでcdataを含ませたい時に少しハマったので備忘録.(cdataとは)
type Test1 struct {
MyTag string `xml:",cdata"` // ← `xml:",charadata"`と同様にMyTagというタグは生成されない
}
func Marshal1() {
byte, _ := xml.Marshal(Test1{"Test1CDATA"})
fmt.Println(string(byte))
// <Test1><![CDATA[Test1CDATA]]></Test1>
}
type (
CDATAString struct {
CDATA string `xml:",cdata"`
}
Test2 struct {
MyTag CDATAString
}
)
func Marshal2() {
byte, _ := xml.Marshal(Test2{CDATAString{"Test2CDATA"}})
fmt.Println(string(byte))
// <Test2><MyTag><![CDATA[Test2CDATA]]></MyTag></Test2>
}
cdataを囲むタグ名を自由に変更したければ以下の方法で可能.
type (
CDATAString struct {
CDATA string `xml:",cdata"`
}
Test3 struct {
MyTag CDATAString `xml:"my_tag"`
}
)
func Marshal3() {
byte, _ := xml.Marshal(Test3{CDATAString{"Test3CDATA"}})
fmt.Println(string(byte))
// <Test3><my_tag><![CDATA[Test3CDATA]]></my_tag></Test3>
}
忘れるとややこしくなるので備忘録でした.