2022-09-28 encoding/xml包的簡單使用

encoding/xml的使用

Marshal序列化/Unmarshal反序列化

1.Marshal序列化:將結構體序列化成的[]byte

type Person struct {
   XMLName xml.Name `xml:"person"`   //這個代表xml的根元素名為 person
   Name string     `xml:"name"`       //名為name的子節(jié)點
   Age int32         `xml:"age"`       //名為age的子節(jié)點
}
//marshal:將結構體編碼成xml格式的[]byte
func testXmlMarsher(){
   p :=Person{
      Name: "huige",
      Age: 20,
   }
   //編碼成xml無縮進
   b1 ,_ := xml.Marshal(p)
   fmt.Println("b1:=",string(b1))

   //編碼成xml有縮進
   b2,_ := xml.MarshalIndent(p,"    ","    ")
   fmt.Println("b2:=",string(b2))
}

2.Unmarshal反序列化:一般用于將xml文件的數據反序列化到某個struct中

//Unmarshal:將xml形式的[]byte解碼到一個結構體中
func testXmlUnmarsher(){
   b := ` <person>
         <name>huige</name>
         <age>20</age>
         </person>`
   data :=[]byte(b)
   var person Person
   xml.Unmarshal(data,&person)
   fmt.Printf("person: %v\n", person)
}
//使用ioutil快速讀取xml文件data,使用Unmarshal反序列化data到struct中庇楞,
func ReadXmlFile(){
   data,_:=ioutil.ReadFile("a.xml")
   var person Person
   xml.Unmarshal(data,&person)
   fmt.Println("person:=",person)
}

Decode編碼/Encode解碼

寫xml文件溯街。

func WriteXml(){
   p :=Person{
      Name: "huige",
      Age: 20,
   }
   fd,_:=os.OpenFile("my.xml",os.O_CREATE|os.O_RDWR,0777)
   encoder := xml.NewEncoder(fd) //創(chuàng)建一個encoder
   encoder.Encode(p)            //將結體數據以xml形式保存到文件中
}

讀取層級比較多的xml的栗子

假如我們有一個如下xml:

<Config>
    <account>root</account>
    <password>root</password>
    <mysql>game</mysql>
    <address>127.0.0.1</address>
    <cmd>
        <data>
            <seq>0</seq>
            <creator>test</creator>
            <type>2</type>
            <cmdstr>CmdToForbidRegisterRole 0</cmdstr>
        </data>
    </cmd>
</Config>

我們應該如何定義結構體呢除嘹?正確應該是一個一個父標簽一個結構體。
根據上面xml我們定義結構體如下:

type Route struct {
    Cmdlist []Cmd `xml:"data"`
}

type Cmd struct {
    Index   int32  `xml:"seq"`
    Type    int32  `xml:"type"`
    Creator string `xml:"creator"`
    CmdStr  string `xml:"cmdstr"`
}
type Command struct {
    XMLName  xml.Name `xml:"Config"`
    Account  string   `xml:"account"`
    Password string   `xml:"password"`
    DBName   string   `xml:"mysql"`
    Address  string   `xml:"address"`
    CmdRoute Route    `xml:"cmd"`
}

第一層父標簽Config我們對應Command結構體吝秕,第二層父標簽cmd我們定義Route結構體瘫析,第三個層ata父標簽我們定義Cmd結構體佛寿。這樣我們只要層層嵌套,就能把xml反序列化到Comand對象中何暇。
注意
1.xml根節(jié)點需要使用XMLName xml.Name xml:"Config"指明
2.結構體字段需要大寫陶夜,否則反序列化報錯。
3.如果是整數請確定使用int32或者int64裆站,不要使用int.

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末条辟,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子宏胯,更是在濱河造成了極大的恐慌羽嫡,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,997評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件肩袍,死亡現場離奇詭異杭棵,居然都是意外死亡,警方通過查閱死者的電腦和手機氛赐,發(fā)現死者居然都...
    沈念sama閱讀 92,603評論 3 392
  • 文/潘曉璐 我一進店門魂爪,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人鹰祸,你說我怎么就攤上這事甫窟。” “怎么了蛙婴?”我有些...
    開封第一講書人閱讀 163,359評論 0 353
  • 文/不壞的土叔 我叫張陵粗井,是天一觀的道長。 經常有香客問我,道長浇衬,這世上最難降的妖魔是什么懒构? 我笑而不...
    開封第一講書人閱讀 58,309評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮耘擂,結果婚禮上胆剧,老公的妹妹穿的比我還像新娘。我一直安慰自己醉冤,他們只是感情好秩霍,可當我...
    茶點故事閱讀 67,346評論 6 390
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著蚁阳,像睡著了一般铃绒。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上螺捐,一...
    開封第一講書人閱讀 51,258評論 1 300
  • 那天颠悬,我揣著相機與錄音,去河邊找鬼定血。 笑死赔癌,一個胖子當著我的面吹牛,可吹牛的內容都是我干的澜沟。 我是一名探鬼主播灾票,決...
    沈念sama閱讀 40,122評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼茫虽!你這毒婦竟也來了铝条?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 38,970評論 0 275
  • 序言:老撾萬榮一對情侶失蹤席噩,失蹤者是張志新(化名)和其女友劉穎班缰,沒想到半個月后,有當地人在樹林里發(fā)現了一具尸體悼枢,經...
    沈念sama閱讀 45,403評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡埠忘,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,596評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現自己被綠了馒索。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片莹妒。...
    茶點故事閱讀 39,769評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖绰上,靈堂內的尸體忽然破棺而出旨怠,到底是詐尸還是另有隱情,我是刑警寧澤蜈块,帶...
    沈念sama閱讀 35,464評論 5 344
  • 正文 年R本政府宣布鉴腻,位于F島的核電站迷扇,受9級特大地震影響,放射性物質發(fā)生泄漏爽哎。R本人自食惡果不足惜蜓席,卻給世界環(huán)境...
    茶點故事閱讀 41,075評論 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望课锌。 院中可真熱鬧厨内,春花似錦、人聲如沸渺贤。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,705評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽志鞍。三九已至丑掺,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間述雾,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,848評論 1 269
  • 我被黑心中介騙來泰國打工兼丰, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留玻孟,地道東北人。 一個月前我還...
    沈念sama閱讀 47,831評論 2 370
  • 正文 我出身青樓鳍征,卻偏偏與公主長得像黍翎,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子艳丛,可洞房花燭夜當晚...
    茶點故事閱讀 44,678評論 2 354

推薦閱讀更多精彩內容