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

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

解組 XML:根據(jù)屬性值使用不同的目標(biāo)類(lèi)型

解組 XML:根據(jù)屬性值使用不同的目標(biāo)類(lèi)型

Go
翻過(guò)高山走不出你 2023-06-26 16:35:51
我想使用不同的類(lèi)型根據(jù)父節(jié)點(diǎn)的 name 屬性來(lái)解組子節(jié)點(diǎn)的 XML 內(nèi)容。在下面的示例中,我有 2 個(gè)具有屬性“apple”和“peach”的子節(jié)點(diǎn)。我想Apple在屬性為 時(shí)"apple"使用Peachtype "peach"。基本上Apple并且Peach有非常不同的結(jié)構(gòu),所以這就是場(chǎng)景。我將如何實(shí)現(xiàn)這一目標(biāo)或建議的方法是什么?這是解決問(wèn)題的基本設(shè)置的游樂(lè)場(chǎng)。<element>    <node name="apple">        <apple>            <color>red<color>        </apple>    </node>    <node name="peach">         <peach>            <size>medium</size>        </peach>    </node></element>var x = `...` // xmltype Element struct {    Nodes []struct{        Name string `xml:"name,attr"`    } `xml:"node"`    Apple Apple    Peach Peach}type Apple struct { // use this struct if name is "apple"    Color string } type Peach struct { // use this struct if name is "peach"    Size string}func main() {    e := Element{}    err := xml.Unmarshal([]byte(x), &e)    if err != nil {        panic(err)    }       fmt.Println(e.Apple.Color)    fmt.Println(e.Peach.Size}
查看完整描述

1 回答

?
桃花長(zhǎng)相依

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

您可以簡(jiǎn)單地迭代您的類(lèi)型的節(jié)點(diǎn),并通過(guò)打開(kāi)它們的屬性來(lái)Element創(chuàng)建Apple和結(jié)構(gòu):PeachName


    for _, element := range e.Nodes {

        switch element.Name {

        case "apple":

            apples = append(apples, Apple{})

        case "peach":

            peaches = append(peaches, Peach{})

        }

    }

這是游樂(lè)場(chǎng)鏈接。


另一個(gè)更復(fù)雜的解決方案(但也更優(yōu)雅和實(shí)用)是在您的類(lèi)型上實(shí)現(xiàn)您自己的UnmarshalXML方法,這將直接用正確的類(lèi)型填充它:Element


type Apple struct {

    Color string

}

type Peach struct {

    Size string

}


type Fruits struct {

    Apples  []Apple

    Peaches []Peach

}


type Element struct {

    XMLName xml.Name `xml:"element"`

    Nodes   []struct {

        Name  string `xml:"name,attr"`

        Apple struct {

            Color string `xml:"color"`

        } `xml:"apple"`

        Peach struct {

            Size string `xml:"size"`

        } `xml:"peach"`

    } `xml:"node"`

}


func (f *Fruits) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {

    var element Element

    d.DecodeElement(&element, &start)


    for _, el := range element.Nodes {

        switch el.Name {

        case "apple":

            f.Apples = append(f.Apples, Apple{

                Color: el.Apple.Color,

            })

        case "peach":

            f.Peaches = append(f.Peaches, Peach{

                Size: el.Peach.Size,

            })

        }

    }


    return nil

}


func main() {

    f := Fruits{}


    err := xml.Unmarshal([]byte(x), &f)

    if err != nil {

        panic(err)

    }


    fmt.Println("Apples:", f.Apples)

    fmt.Println("Peaches", f.Peaches)

}

這是第二個(gè)解決方案的游樂(lè)場(chǎng)鏈接

結(jié)果:


Apples: [{red}]

Peaches [{medium}]


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

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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