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

golang 配列を XML に変換

PHPz
PHPzオリジナル
2023-05-10 09:48:37613ブラウズ

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 までご連絡ください。