package main
import (
"encoding/xml"
"fmt"
)
// 定义结构体,注意标签中指定命名空间
type Outer struct {
XMLName xml.Name `xml:"outer"`
Middle Middle `xml:"ns1:middle"`
}
type Middle struct {
XMLName xml.Name `xml:"ns1:middle"`
Inner Inner `xml:"ns2:inner"`
}
type Inner struct {
XMLName xml.Name `xml:"ns2:inner"`
Data string `xml:",chardata"`
}
func main() {
xmlData := `<outer xmlns:ns1='http://ns1.com'><ns1:middle xmlns:ns2='http://ns2.com'><ns2:inner>data</ns2:inner></ns1:middle></outer>`
var outer Outer
err := xml.Unmarshal([]byte(xmlData), &outer)
if err != nil {
fmt.Println("解析XML出错:", err)
return
}
newXMLData, err := xml.MarshalIndent(outer, "", " ")
if err != nil {
fmt.Println("序列化XML出错:", err)
return
}
// 添加XML声明头
newXMLData = append([]byte(xml.Header), newXMLData...)
fmt.Println(string(newXMLData))
}