ホームページ バックエンド開発 Golang golang 配列を XML に変換

golang 配列を XML に変換

May 10, 2023 am 09:48 AM

Web 開発やクラウド コンピューティングの分野で golang の人気が高まるにつれ、golang の XML 処理が徐々に注目を集めるようになりました。実際のプロジェクトでは、xml 形式でデータを送信して保存する必要があることが多く、xml からデータを解析して go 配列に変換する必要もあります。そこでこの記事ではgoの配列をxml形式に変換して実際の開発で利用する方法を紹介します。

1. Golang の xml パッケージ

Golang の xml パッケージは、xml を処理するためのコア パッケージであり、xml から go データ構造へ、および go データ構造から xml への解析を提供します。 Golang の xml パッケージは、構造体、数値、文字列などのさまざまなタイプのエンコードとデコードをサポートしています。このパッケージで提供される関数の中で、Marshal 関数と Unmarshal 関数は最もよく使用される 2 つの関数であり、それぞれ XML データのシリアル化と解析に使用されます。

2. 配列から xml への変換

golang の xml パッケージはさまざまなタイプのエンコードとデコードをサポートしていますが、配列のシリアル化と逆シリアル化に対応するインターフェイスは提供していません。したがって、XML 配列をエンコードおよびデコードする場合は、変換メソッドを自分で定義する必要があります。

  1. 配列を xml に変換する

配列を XML 形式に変換するという考え方は、まず配列を構造体に変換し、次にその構造体を XML に変換するというものです。 。次に、最初にカスタム タイプ User を定義します。これには、id、name、age の 3 つのフィールドがあります。

type User struct {
    Id   string `xml:"id"`
    Name string `xml:"name"`
    Age  int    `xml:"age"`
}
ログイン後にコピー

次に、Users データ型を定義します。これには、XMLName、Version、およびユーザー配列 Items という 3 つのフィールドもあります。

type Users struct {
    XMLName xml.Name `xml:"users"`
    Version string   `xml:"version,attr"`
    Items   []User   `xml:"user"`
}
ログイン後にコピー

次に、配列を XML 形式に変換する関数を定義します。この関数の基本的な考え方は、Users 型のインスタンスを作成し、配列内の各要素を User 型に変換し、それを Users の Items 配列に追加することです。最後に、xml.Marshal 関数を使用して、ユーザー インスタンスを XML 形式のバイトに変換します。

func ArrayToXml(arr []interface{}) ([]byte, error) {
    var users Users
    users.Version = "1.0"
    for i := 0; i < len(arr); i++ {
        var user User
        if v, ok := arr[i].(map[string]interface{}); ok {
            user.Id = v["id"].(string)
            user.Name = v["name"].(string)
            user.Age = v["age"].(int)
            users.Items = append(users.Items, user)
        }
    }
    return xml.Marshal(users)
}
ログイン後にコピー

上記のコードでは、変数 arr は任意の型の配列を参照しており、その各要素の型は map[string]interface{} です。ここでは型アサーションを使用して、map[string]interface{} 型の変数を対応する型に強制的に変換し、配列内の要素の解析を実現します。

  1. Xml から配列

配列を XML に変換するのと同じように、XML を配列に変換する考え方は次のとおりです。まず XML を構造体に変換し、次に、構造体を対応する型の配列に変換します。

Golang の xml パッケージには Unmarshal 関数が用意されており、xml 形式のバイト配列を構造体に変換できます。次のコードは、xml 形式のバイト配列を Users インスタンスに変換する方法を示しています。

func XmlToArray(data []byte) ([]interface{}, error) {
    var users Users
    var arr []interface{}
    err := xml.Unmarshal(data, &users)
    if err != nil {
        return nil, err
    }
    for _, item := range users.Items {
        m := make(map[string]interface{})
        m["id"] = item.Id
        m["name"] = item.Name
        m["age"] = item.Age
        arr = append(arr, m)
    }
    return arr, nil
}
ログイン後にコピー

上記のコードでは、xml から解析された Users 型インスタンスを配列型に変換します。ここでは for ループを使用して、Users インスタンス内の各 User タイプのインスタンスを map[string]interface{} タイプに変換し、配列に追加します。

3. テスト

配列を XML 形式に変換し、XML 形式を配列に変換するという基本操作が正常に実装されました。テストを行ってみましょう:

func main() {
    arr := make([]interface{}, 0)
    m1 := map[string]interface{}{
        "id":   "1",
        "name": "Tom",
        "age":  20,
    }
    m2 := map[string]interface{}{
        "id":   "2",
        "name": "Jerry",
        "age":  22,
    }
    arr = append(arr, m1)
    arr = append(arr, m2)

    data, err1 := ArrayToXml(arr)
    if err1 != nil {
        fmt.Println("error:", err1)
        return
    }
    fmt.Println("array to xml:", string(data))

    arr2, err2 := XmlToArray(data)
    if err2 != nil {
        fmt.Println("error:", err2)
        return
    }
    fmt.Println("xml to array:", arr2)
}
ログイン後にコピー

上記を実行します。コードを実行すると、次の結果が表示されます。

array to xml: <?xml version="1.0" encoding="UTF-8"?>
<users version="1.0">
    <user>
        <id>1</id><name>Tom</name><age>20</age>
    </user>
    <user>
        <id>2</id><name>Jerry</name><age>22</age>
    </user>
</users>

xml to array: [map[id:1 name:Tom age:20] map[id:2 name:Jerry age:22]] 
ログイン後にコピー

これは、配列を XML 形式に正常に変換し、XML 形式のデータを対応する型の配列に正しく解析できることを意味します。

4. まとめ

この記事では主にgolangのxmlパッケージを使って配列をxml形式に変換する方法と、xml形式を配列に変換する方法を紹介します。 golang の xml パッケージ自体は配列に対する対応するサポートを提供していませんが、配列を構造体に変換し、構造体を XML に変換することによって、配列をシリアル化および逆シリアル化できます。実際のプロジェクトでは、特定のニーズに応じてカスタマイズされた開発を実行し、より良い使用結果を達成するためにインターフェイスを継続的に改善および最適化する必要があります。

以上がgolang 配列を XML に変換の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Debian OpenSSLの脆弱性は何ですか Debian OpenSSLの脆弱性は何ですか Apr 02, 2025 am 07:30 AM

OpenSSLは、安全な通信で広く使用されているオープンソースライブラリとして、暗号化アルゴリズム、キー、証明書管理機能を提供します。ただし、その歴史的バージョンにはいくつかの既知のセキュリティの脆弱性があり、その一部は非常に有害です。この記事では、Debian SystemsのOpenSSLの共通の脆弱性と対応測定に焦点を当てます。 Debianopensslの既知の脆弱性:OpenSSLは、次のようないくつかの深刻な脆弱性を経験しています。攻撃者は、この脆弱性を、暗号化キーなどを含む、サーバー上の不正な読み取りの敏感な情報に使用できます。

GOの浮動小数点番号操作に使用されるライブラリは何ですか? GOの浮動小数点番号操作に使用されるライブラリは何ですか? Apr 02, 2025 pm 02:06 PM

GO言語の浮動小数点数操作に使用されるライブラリは、精度を確保する方法を紹介します...

Go's Crawler Collyのキュースレッドの問題は何ですか? Go's Crawler Collyのキュースレッドの問題は何ですか? Apr 02, 2025 pm 02:09 PM

Go Crawler Collyのキュースレッドの問題は、Go言語でColly Crawler Libraryを使用する問題を調査します。 �...

Debianの下のPostgreSQL監視方法 Debianの下のPostgreSQL監視方法 Apr 02, 2025 am 07:27 AM

この記事では、Debianシステムの下でPostgreSQLデータベースを監視するためのさまざまな方法とツールを紹介し、データベースのパフォーマンス監視を完全に把握するのに役立ちます。 1. PostgreSQLを使用して監視を監視す​​るビューPostgreSQL自体は、データベースアクティビティを監視するための複数のビューを提供します。 PG_STAT_REPLICATION:特にストリームレプリケーションクラスターに適した複製ステータスを監視します。 PG_STAT_DATABASE:データベースサイズ、トランザクションコミット/ロールバック時間、その他のキーインジケーターなどのデータベース統計を提供します。 2。ログ分析ツールPGBADGを使用します

フロントエンドからバックエンドの開発に変身すると、JavaやGolangを学ぶことはより有望ですか? フロントエンドからバックエンドの開発に変身すると、JavaやGolangを学ぶことはより有望ですか? Apr 02, 2025 am 09:12 AM

バックエンド学習パス:フロントエンドからバックエンドへの探査の旅は、フロントエンド開発から変わるバックエンド初心者として、すでにNodeJSの基盤を持っています...

Goでは、Printlnとstring()関数を備えた文字列を印刷すると、なぜ異なる効果があるのですか? Goでは、Printlnとstring()関数を備えた文字列を印刷すると、なぜ異なる効果があるのですか? Apr 02, 2025 pm 02:03 PM

Go言語での文字列印刷の違い:printlnとstring()関数を使用する効果の違いはGOにあります...

Redisストリームを使用してGO言語でメッセージキューを実装する場合、user_idタイプの変換の問題を解決する方法は? Redisストリームを使用してGO言語でメッセージキューを実装する場合、user_idタイプの変換の問題を解決する方法は? Apr 02, 2025 pm 04:54 PM

redisstreamを使用してGo言語でメッセージキューを実装する問題は、GO言語とRedisを使用することです...

Beego ormのモデルに関連付けられているデータベースを指定する方法は? Beego ormのモデルに関連付けられているデータベースを指定する方法は? Apr 02, 2025 pm 03:54 PM

Beegoormフレームワークでは、モデルに関連付けられているデータベースを指定する方法は?多くのBEEGOプロジェクトでは、複数のデータベースを同時に操作する必要があります。 Beegoを使用する場合...

See all articles