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 配列をエンコードおよびデコードする場合は、変換メソッドを自分で定義する必要があります。
配列を 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{} 型の変数を対応する型に強制的に変換し、配列内の要素の解析を実現します。
配列を 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 サイトの他の関連記事を参照してください。