Go で属性と浮動小数点値を使用して XML 要素をアンマーシャリングする方法

DDD
リリース: 2024-10-23 18:38:02
オリジナル
822 人が閲覧しました

How to Unmarshal XML Elements with Attributes and Floating-Point Values in Go?

Go での属性と浮動小数点値を使用した XML 要素のアンマーシャリング

指定された XML 要素を、属性と浮動小数点値を使用してアンマーシャリングするには浮動小数点値の場合は、XML 構造に対応する Go 構造体を定義する必要があります。

構造体の定義

で指定された 2 つの構造体の定義を考えてみましょう。質問:

最初の定義:

<code class="go">type ThingElem struct {
    Prop  int   `xml:"prop,attr"`
    Value float // ???
}

type ThingWrapper struct {
    T ThingElem `xml:"thing"`
}</code>
ログイン後にコピー

2 番目の定義:

<code class="go">type ThingElem struct {
    XMLName xml.Name `xml:"thing"` // Do I even need this?
    Prop    int      `xml:"prop,attr"`
    Value   float    // ???
}</code>
ログイン後にコピー

オプションのアドレス指定:

  • XMLName プロパティ: XMLName プロパティは通常、構造体の XML 要素名を指定するために使用する必要があるため、この場合は必要ありません。要素名は xml:"thing" 注釈で明示的に指定されます。
  • Float Value Representation: 最初の構造体の float フィールドは、浮動小数点値であるため、正しくアンマーシャリングできません。 XML にスペースが含まれています。アンマーシャリングする前にこれらのスペースを削除する必要があります。
  • ラッパーまたは直接埋め込み: 2 番目の構造体定義は、ラッパー (ThingWrapper) を使用して XML 要素を表します。 ThingElem 構造体はすでに XML 構造を正確に表しているため、これは必要ありません。

最終解決策:

<code class="go">type Thing struct {
    Prop  int     `xml:"prop,attr"`
    Value float64 `xml:",chardata"`
}

type Root struct {
    Things []Thing `xml:"thing"`
}</code>
ログイン後にコピー

このソリューションでは、Thing 構造体は次のことを表します。単一の XML 要素であり、ルート構造体は、XML ルート要素をアンマーシャリングするための Thing 構造体のスライスを保持するコンテナーです。

コード例:

<code class="go">package main

import (
    "encoding/xml"
    "fmt"
)

const xmlData = `
<root>
<thing prop="1">1.23</thing>
<thing prop="2">4.56</thing>
</root>
`

func main() {
    root := &Root{}
    if err := xml.Unmarshal([]byte(xmlData), root); err != nil {
        fmt.Println(err)
        return
    }
    fmt.Println(root.Things)
}</code>
ログイン後にコピー

このコードは、浮動小数点値からのスペースの削除など、XML 要素を Go 構造体にアンマーシャリングする方法を示しています。

以上がGo で属性と浮動小数点値を使用して XML 要素をアンマーシャリングする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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