第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

XML 通過字段名稱中的索引解組動(dòng)態(tài)響應(yīng)

XML 通過字段名稱中的索引解組動(dòng)態(tài)響應(yīng)

Go
12345678_0001 2023-07-26 17:23:09
我正在嘗試解組“動(dòng)態(tài)”XML 響應(yīng),但我不確定如何處理它。服務(wù)器響應(yīng)相當(dāng)大的響應(yīng),所以我不想兩次解析響應(yīng)。XML 看起來像這樣:...<nic_cnt>2</nic_cnt><ifindex1>eno1</ifindex1><ifindex2>eno2</ifindex2>...因此該字段定義了發(fā)生的nic_cnt次數(shù)。ifindex由于我不知道會(huì)發(fā)生多少次ifindex,因此我無(wú)法靜態(tài)定義解組響應(yīng)所需的結(jié)構(gòu)字段。
查看完整描述

1 回答

?
慕標(biāo)琳琳

TA貢獻(xiàn)1830條經(jīng)驗(yàn) 獲得超9個(gè)贊

您可以使用帶有 XML 標(biāo)記選項(xiàng)的切片,any來告訴encoding/xml包將任何 XML 標(biāo)記放入其中。這記錄在xml.Unmarshal()

If the XML element contains a sub-element that hasn't matched any

? ?of the above rules and the struct has a field with tag ",any",

? ?unmarshal maps the sub-element to that struct field.

對(duì)于<ifindexXX>標(biāo)簽,使用另一個(gè)包含XMLNametype 字段的結(jié)構(gòu)xml.Name,因此如果您需要僅過濾以 開頭的字段,則實(shí)際字段名稱將可用ifindex。


讓我們解析以下 XML:


<root>

? ? <nic_cnt>2</nic_cnt>

? ? <ifindex1>eno1</ifindex1>

? ? <ifindex2>eno2</ifindex2>

</root>

我們可以用以下方法對(duì)其進(jìn)行建模:


type Root struct {

? ? NicCnt? int? ? ?`xml:"nic_cnt"`

? ? Entries []Entry `xml:",any"`

}


type Entry struct {

? ? XMLName xml.Name

? ? Value? ?string `xml:",innerxml"`

}

解析它的示例代碼:


var root Root

if err := xml.Unmarshal([]byte(src), &root); err != nil {

? ? panic(err)

}

fmt.Printf("%+v", root)

輸出(在Go Playground上嘗試):


{NicCnt:2 Entries:[

? ? {XMLName:{Space: Local:ifindex1} Value:eno1}

? ? {XMLName:{Space: Local:ifindex2} Value:eno2}]}

請(qǐng)注意,Root.Entries還將包含其他未映射的 XML 標(biāo)記。如果您只關(guān)心以 開頭的標(biāo)簽ifindex,則可以通過以下方式“過濾”它們:


for _, e := range root.Entries {

? ? if strings.HasPrefix(e.XMLName.Local, "ifindex") {

? ? ? ? fmt.Println(e.XMLName.Local, ":", e.Value)

? ? }

}

如果 XML 還包含附加標(biāo)簽:


<other>something else</other>

輸出將是(在Go Playground上嘗試這個(gè)):


{NicCnt:2 Entries:[

? ? {XMLName:{Space: Local:ifindex1} Value:eno1}

? ? {XMLName:{Space: Local:ifindex2} Value:eno2}

? ? {XMLName:{Space: Local:other} Value:something else}]}

ifindex1 : eno1

ifindex2 : eno2


查看完整回答
反對(duì) 回復(fù) 2023-07-26
  • 1 回答
  • 0 關(guān)注
  • 155 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)