亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何解組動態 XML 數據以進行結構化?

如何解組動態 XML 數據以進行結構化?

Go
RISEBY 2022-12-19 11:54:42
我有一個 XML 數據,其中包含一些具有動態元素名稱的重復數據,如下所示。<Ht><Criteria>    <ADNode_1>2</ADNode_1>    <CDNode_1>2</CDNode_1>    <IFNode_1>0</IFNode_1>    <ADNode_2>2</ADNode_2>    <CDNode_2>0</CDNode_2>    <IFNode_2>0</IFNode_2>    <ADNode_3>0</ADNode_3>    <CDNode_3>0</CDNode_3>    <IFNode_3>0</IFNode_3></Criteria><session id="1056134770841202228344907">    <Htd ID="21170">        <Data_1>            <Info Count="2"></Info>            <Data Id="iV29308/B2/R1">                <Type>TR1</Type>            </Data>            <Data Id="iV29308/B3/R1">                <Type>TR1</Type>            </Data>            <Data Id="iV29308/B4/R1">                <Type>TR1</Type>            </Data>            <Data Id="iV29308/B6/R1">                <Type>TR1</Type>            </Data>        </Data_1>        <Data_2>            <Info Count="2"></Info>            <Data Id="iV29308/B2/R1">                <Type>TR2</Type>            </Data>            <Data Id="iV29308/B3/R1">                <Type>TR2</Type>            </Data>            <Data Id="iV29308/B4/R1">                <Type>TR2</Type>            </Data>            <Data Id="iV29308/B6/R1">                <Type>TR3</Type>            </Data>        </Data_2>    </Htd></session>我可以為<ADNode_1>、<ADNode_2>和<ADNode_3>或創建單獨的結構<Data_1>,<Data_2>但是可以有 n 個這樣的節點。像下面一樣<ADNode_1>2</ADNode_1><ADNode_2>2</ADNode_2><ADNode_3>2</ADNode_3><ADNode_n>2</ADNode_n>要么<Data_1></Data_1><Data_2></Data_2><Data_3></Data_3><Data_n></Data_n>如何為這些節點創建具有 n 個節點或元素的結構?這是我正在嘗試使用的游樂場鏈接。
查看完整描述

1 回答

?
繁花不似錦

TA貢獻1851條經驗 獲得超4個贊

通常對于這些情況,您可以在 Go 中使用切片來“收集”元素,并使用,any選項將您沒有映射的所有內容放入其中。為了能夠識別來源,請使用一個XMLName xml.Name字段,該字段將保留它源自的 XML 標記的名稱。


例如,您可以像這樣對 XML 進行建模:


type Ht struct {

    Criteria struct {

        Nodes []struct {

            XMLName xml.Name

            Content string `xml:",chardata"`

        } `xml:",any"`

    }

    Session struct {

        ID  string `xml:"id,attr"`

        Htd struct {

            ID    string `xml:"ID,attr"`

            DataX []struct {

                XMLName xml.Name

                Info    struct {

                    Count int `xml:"Count,attr"`

                }

                DataNodes []struct {

                    XMLName xml.Name

                    ID      string `xml:"Id,attr"`

                    Type    string

                } `xml:",any"`

            } `xml:",any"`

        }

    } `xml:"session"`

}

解析它并重新編碼它將保留所有元素:


var ht Ht

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

    panic(err)

}


result, err := xml.MarshalIndent(ht, "", "  ")

if err != nil {

    panic(err)

}


fmt.Println(string(result))

這將輸出(在Go Playground上嘗試):


<Ht>

  <Criteria>

    <ADNode_1>2</ADNode_1>

    <CDNode_1>2</CDNode_1>

    <IFNode_1>0</IFNode_1>

    <ADNode_2>2</ADNode_2>

    <CDNode_2>0</CDNode_2>

    <IFNode_2>0</IFNode_2>

    <ADNode_3>0</ADNode_3>

    <CDNode_3>0</CDNode_3>

    <IFNode_3>0</IFNode_3>

  </Criteria>

  <session id="1056134770841202228344907">

    <Htd ID="21170">

      <Data_1>

        <Info Count="2"></Info>

        <Data Id="iV29308/B2/R1">

          <Type>TR1</Type>

        </Data>

        <Data Id="iV29308/B3/R1">

          <Type>TR1</Type>

        </Data>

        <Data Id="iV29308/B4/R1">

          <Type>TR1</Type>

        </Data>

        <Data Id="iV29308/B6/R1">

          <Type>TR1</Type>

        </Data>

      </Data_1>

      <Data_2>

        <Info Count="2"></Info>

        <Data Id="iV29308/B2/R1">

          <Type>TR2</Type>

        </Data>

        <Data Id="iV29308/B3/R1">

          <Type>TR2</Type>

        </Data>

        <Data Id="iV29308/B4/R1">

          <Type>TR2</Type>

        </Data>

        <Data Id="iV29308/B6/R1">

          <Type>TR3</Type>

        </Data>

      </Data_2>

    </Htd>

  </session>

</Ht>



查看完整回答
反對 回復 2022-12-19
  • 1 回答
  • 0 關注
  • 186 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號