go基礎 xml解析

2021-10-16 06:44:29 字數 3193 閱讀 7354

一、簡介

xml是一種進行資料交換和資訊傳遞的一種格式,在web後端開發使用非常普遍,下面介紹go語言解析xml的方法。

二、**

1.將xml解析為物件

>

>

grace r. emlinfullname

>

>

example inc.company

>

where

="home"

>

>

[email protected]

>

email

>

where

='work'

>

>

[email protected]

>

email

>

>

>

friendsvalue

>

>

squashvalue

>

group

>

>

hanga roacity

>

>

easter islandstate

>

person

>

使用xml的unmarshal進行自動解析

import

("encoding/xml"

"fmt"

)type email struct

type address struct

type result struct

type root struct

v := result

data :=

` grace r. emlin

example inc.

[email protected]

[email protected]

friends

squash

hanga roa

easter island

` err := xml.

unmarshal([

]byte

(data)

,&v)

if err !=

nil// fmt.printf("xmlname: %#v\n", v.xmlname)

fmt.

printf

("name: %q\n"

, v.name)

fmt.

printf

("phone: %q\n"

, v.phone)

fmt.

printf

("email: %v\n"

, v.email)

fmt.

printf

("groups: %v\n"

, v.groups)

fmt.

printf

("address: %v\n"

, v.address)

下面是unmarshal解析的解析規則(下面的規則是從golang的官方文件中翻譯過來的):

1)如果該結構有乙個型別為byte或string",innerxnl"的字段。unmarshal收集該字段中元素內巢狀的原始xmi。其餘的規則仍然適用。

2)如果該結構有乙個型別為xml . name的名為xmlname的字段,unnarshal記錄該字段中的元素名。

3)如果xmlname欄位有表單的關聯標記"name" 或 「namespace-url name」, 元素必須具有name(和 , 可選的 「name space」),否則unnarshal返回錯誤。

4)如果xml元素具有乙個屬性,該屬性的名字與struct結構體的欄位名字匹配(這個欄位的tag 包含",attr" 或者顯示包含name 「name,attr」),unmarshal記錄該字段中的屬性值。

5)如果xml元素包含字元資料,該資料積累在第乙個有標籤「chardata」的struct欄位中,該struct欄位的型別可能為byte或string。如果沒有這樣的字段。字元資料被丟棄。

6)如果xml元素包含注釋,它們會累積在第乙個帶有標籤",comments"的struct欄位中。struct欄位的型別可以是byte或string。如果沒有這樣的字段,注釋將被丟棄。

7)如果xml元素包含名稱匹配的子元素標籤format tag的字首為「a」或「a>b>c」,unmarshal將進入xml結構查詢具有給定名稱的元素,並將最內層的元素對映到該struct欄位。以「>」開頭的標籤相當於乙個以欄位名後跟「>」開頭的標籤。

8)如果xml元素包含乙個子元素,該子元素的名稱與struct欄位的xmlname標籤匹配,並且struct欄位沒有按照前面的規則顯式的名稱標籤,unmarshal將該子元素對映到該struct欄位

9)如果xml元素包含乙個子元素,它的名字匹配欄位中沒有任何模式標記(",attr", ", chardata"等)。unmarshal 解析子元素到該結構字段。

10)如果xml元素包含乙個子元素,它不符合上面的任何規則,並且該結構有乙個帶",any"標籤的字段unmarshal 匹配子元素到該結構字段」。

11)乙個非指標匿名結構欄位被當作它的值的字段是外部結構的一部分來處理。

12)帶有「-」標籤的struct欄位永遠不會被解編入。

2.將物件解析為xml,這個過程是上面過程的逆過程,不過很簡單,不用擔心

type email struct

type address struct

type result struct

type root struct

r := root

, email},

groups:

string

, address: address,}

,}vbyte, err := xml.

marshal

(r)if err !=

nil fmt.

printf

("%v\n"

,string

(vbyte)

)

上面**的輸出結果為:

愛喝水的社長18888888888***[email protected]***[email protected]

與1中的xml結構相同!

以上就是go的xml的解析方式!

使用go語言解析xml

作業系統 centos 6.9 x64 go語言版本 1.8.3 現有乙個自動報障程式,如果服務出錯會自動給指定人傳送郵件,配置檔案內容如下 default.xml xml version 1.0 encoding utf 8 config smtpserver smtp.163.com smtps...

python解析XML檔案(基礎)

python可以用來解析xml檔案 encoding utf 8 import os,sys import xml.etree.elementtree as et filename os.path.join sys.path 0 test.xml tree et.parse filename tre...

OC基礎 XML的解析方式

dom 建立xml解析器 nsxmlparser parser nsxmlparser alloc initwithdata data 設定 parser.delegate self 開始解析xml parse方法是阻塞式的 parser parse 解析到某個元素的結尾 比如解析 void par...