ホームページ >バックエンド開発 >Golang >属性および浮動小数点値を含む XML 要素をアンマーシャリングするために XMLName を使用する必要がありますか?

属性および浮動小数点値を含む XML 要素をアンマーシャリングするために XMLName を使用する必要がありますか?

Barbara Streisand
Barbara Streisandオリジナル
2024-10-23 22:52:02815ブラウズ

Do I Need to Use XMLName for Unmarshaling XML Elements with Attributes and Floating Point Values?

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

属性と浮動小数点値を使用して XML 要素をアンマーシャリングするには、次のように定義します。対応するフィールドを含む Go 構造体。ただし、xml.Name プロパティの使用に関してはいくつかの考慮事項があります。

提供された XML 要素内:

<code class="xml"><thing prop="1">
  1.23
</thing></code>

ThingElem 構造体には次のプロパティが必要です:

  • Prop: このフィールドは属性 prop に対応し、その型は int です。
  • Value: このフィールドは浮動小数点値 1.23 に対応します。

オプション 1: XMLName

を使用する このオプションでは、xml.Name フィールドを ThingElem 構造体に追加できます。このフィールドは通常、XML 構造があいまいな場合に使用されます。この場合、構造体が Thing 要素に対応していることは明らかであるため、これは必要ありません。

<code class="go">type ThingElem struct {
    XMLName xml.Name `xml:"thing"` // Do I even need this?
    Prop    int      `xml:"prop,attr"`
    Value   float    // ???
}</code>

オプション 2: XMLName なし

曖昧さがないためXML 構造では、xml.Name フィールドを省略できます。

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

浮動小数点値のアンマーシャリング

浮動小数点値を正しくアンマーシャリングするには、以下を行う必要があります。 XML 内にスペースが含まれていないことを確認してください。この例では、値は 1.23 ですが、スペースを削除して 1.23 として保存することをお勧めします。

ネストされたデータのアンマーシャリング

次のようにしてネストされたデータをアンマーシャリングすることもできます。ラッパー構造体を定義します。たとえば、XML には複数の Thing 要素が含まれています。これらをアンマーシャリングするには、ThingWrapper 構造体を定義します。

<code class="go">type ThingWrapper struct {
    T ThingElem `xml:"thing"`
}</code>

完全なコード例

提供された XML データをアンマーシャリングする完全なコード例を次に示します。

<code class="go">package main

import (
    "encoding/xml"
    "fmt"
)

type Root struct {
    Things []Thing `xml:"thing"`
}

type Thing struct {
    Prop  int     `xml:"prop,attr"`
    Value float64 `xml:",chardata"`
}

func main() {
    data := `<root><thing prop="1">1.23</thing><thing prop="2">4.56</thing></root>`
    thing := &Root{}
    err := xml.Unmarshal([]byte(data), thing)
    if err != nil {
        fmt.Println(err)
        return
    }
    fmt.Println(thing)
}</code>

このコードは、prop 属性と浮動小数点値を含む、解析された XML データを出力します。

以上が属性および浮動小数点値を含む XML 要素をアンマーシャリングするために XMLName を使用する必要がありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。