Go で XML 配列の最初の要素だけをアンマーシャリングしないようにするにはどうすればよいですか?

Barbara Streisand
リリース: 2024-10-24 06:29:02
オリジナル
537 人が閲覧しました

How to Avoid Unmarshaling Only the First Element of an XML Array in Go?

Go で XML 配列をアンマーシャルする: 最初の要素のみを取得する

エンタープライズ環境で普及しているデータ形式である XML は、多くの場合複雑な形式で表現されます。 、入れ子構造。 Go は多用途のプログラミング言語であり、堅牢な XML アンマーシャリング機能を提供します。ただし、XML 配列のアンマーシャリングの微妙な違いを理解することが重要になる場合があります。

特定のシナリオでは、開発者は XML 配列をアンマーシャリングするときに問題が発生しました。コードは最初の要素のアンマーシャリングに成功しましたが、配列全体の取得に失敗しました。

問題:

type HostSystemIdentificationInfo []struct {
    IdentiferValue string `xml:"identifierValue"`
    IdentiferType  struct {
        Label   string `xml:"label"`
        Summary string `xml:"summary"`
        Key     string `xml:"key"`
    } `xml:"identifierType"`
}

func main() {
    var t HostSystemIdentificationInfo
    err := xml.Unmarshal([]byte(vv), &t)
    if err != nil {
        log.Fatal(err)
    }
    fmt.Println(t)
}

const vv = `
  <HostSystemIdentificationInfo xsi:type="HostSystemIdentificationInfo">
    <identifierValue>unknown</identifierValue>
    <identifierType>
      <label>Asset Tag</label>
      <summary>Asset tag of the system</summary>
      <key>AssetTag</key>
    </identifierType>
  </HostSystemIdentificationInfo>
`
ログイン後にコピー

期待される出力:

[{ unknown {Asset Tag Asset tag of the system AssetTag}}]
ログイン後にコピー
ログイン後にコピー

実際の出力:

[{ unknown {Asset Tag Asset tag of the system AssetTag}}]
ログイン後にコピー
ログイン後にコピー

解決策:

この問題は、 XML アンマーシャリング プロセス。 XML 配列をアンマーシャリングする場合、データを受け取るためのポインターとしてターゲット構造体を単純に指定することはできません。代わりに、xml.Decoder を作成し、その Decode メソッドを繰り返し呼び出す必要があります。

package main

import (
    "bytes"
    "encoding/xml"
    "fmt"
    "io"
    "log"
)

type HostSystemIdentificationInfo struct {
    IdentiferValue string `xml:"identifierValue"`
    IdentiferType  struct {
        Label   string `xml:"label"`
        Summary string `xml:"summary"`
        Key     string `xml:"key"`
    } `xml:"identifierType"`
}

func main() {
    d := xml.NewDecoder(bytes.NewBufferString(vv))
    for {
        var t HostSystemIdentificationInfo
        err := d.Decode(&t)
        if err == io.EOF {
            break
        }
        if err != nil {
            log.Fatal(err)
        }
        fmt.Println(t)
    }
}

const vv = `
  <HostSystemIdentificationInfo xsi:type="HostSystemIdentificationInfo">
    <identifierValue>unknown</identifierValue>
    <identifierType>
      <label>Asset Tag</label>
      <summary>Asset tag of the system</summary>
      <key>AssetTag</key>
    </identifierType>
  </HostSystemIdentificationInfo>
`
ログイン後にコピー

xml.Decoder を利用すると、XML 配列内の各要素を正しく反復し、個別にアンマーシャリングできます。

したがって、これらの手順に従うことで、開発者は Go で XML 配列を効果的にアンマーシャリングし、複雑なデータ構造を効率的に解析できるようになります。

以上がGo で XML 配列の最初の要素だけをアンマーシャリングしないようにするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!