0Pricing
Go Academy · レッスン

encoding/xml

XMLを扱います

「encoding/xml」はCoddyKit上の無料Go Academyレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはGo Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Go Academyコースには全4レッスンが含まれています。

XMLの操作

XMLは冗長なタグベースの形式で、レガシーシステムや設定ファイルで今もよく使われています。Goのencoding/xmlパッケージは、jsonパッケージと同様にXMLのマーシャリングとアンマーシャリングを行います。

XMLへのMarshal

xml.MarshalはGoの値をXMLバイトに変換します。

package main

import (
	"encoding/xml"
	"fmt"
)

type User struct {
	Name string
	Age  int
}

func main() {
	b, _ := xml.Marshal(User{"Ann", 30})
	fmt.Println(string(b))
}

XMLタグ

xmlタグは要素名を制御します。これはjsonタグがJSONキーを制御するのと同じです。

package main

import (
	"encoding/xml"
	"fmt"
)

type User struct {
	Name string "xml:\"name\""
}

func main() {
	b, _ := xml.Marshal(User{"Ann"})
	fmt.Println(string(b))
}

XMLNameによるルート要素

XMLNameという名前のxml.Name型のフィールドによって、ルート要素の名前を設定します。

package main

import (
	"encoding/xml"
	"fmt"
)

type User struct {
	XMLName xml.Name "xml:\"user\""
	Name    string   "xml:\"name\""
}

func main() {
	b, _ := xml.Marshal(User{Name: "Ann"})
	fmt.Println(string(b))
}

属性

タグに,attrを追加すると、フィールドを子要素ではなくXML属性として出力できます。

package main

import (
	"encoding/xml"
	"fmt"
)

type User struct {
	XMLName xml.Name "xml:\"user\""
	ID      int      "xml:\"id,attr\""
	Name    string   "xml:\"name\""
}

func main() {
	b, _ := xml.Marshal(User{ID: 7, Name: "Ann"})
	fmt.Println(string(b))
}

XMLのUnmarshal

xml.UnmarshalはXMLバイトをポインタが指す値に解析し、要素名をタグと照合します。

package main

import (
	"encoding/xml"
	"fmt"
)

type User struct {
	Name string "xml:\"name\""
}

func main() {
	var u User
	xml.Unmarshal([]byte("<User><name>Bob</name></User>"), &u)
	fmt.Println(u.Name)
}

ネストした要素

ネストした構造体はネストしたXML要素に対応し、ツリーを構築します。

package main

import (
	"encoding/xml"
	"fmt"
)

type Address struct {
	City string "xml:\"city\""
}
type User struct {
	Name    string  "xml:\"name\""
	Address Address "xml:\"address\""
}

func main() {
	b, _ := xml.Marshal(User{"Ann", Address{"Rome"}})
	fmt.Println(string(b))
}

XMLの整形表示

xml.MarshalIndentは、読みやすいようにインデントを付けて出力を整形します。

package main

import (
	"encoding/xml"
	"fmt"
)

type User struct {
	Name string "xml:\"name\""
}

func main() {
	b, _ := xml.MarshalIndent(User{"Ann"}, "", "  ")
	fmt.Println(string(b))
}

繰り返し要素

スライスフィールドは、各項目につき1つずつ、繰り返し並ぶXML要素になります。

package main

import (
	"encoding/xml"
	"fmt"
)

type List struct {
	Items []string "xml:\"item\""
}

func main() {
	b, _ := xml.Marshal(List{Items: []string{"a", "b"}})
	fmt.Println(string(b))
}

JSONとXML

APIは互いによく似ています。Marshal、Unmarshal、MarshalIndent、構造体タグを使います。XMLには属性とXMLNameによるルート要素の概念が追加されます。新しいAPIにはJSONを、レガシーシステムにはXMLを使用してください。

ヘッダー宣言

定数xml.Headerには標準のXML宣言文字列が格納されています。完全なドキュメントにするには、出力の先頭に追加できます。

package main

import (
	"encoding/xml"
	"fmt"
)

func main() {
	fmt.Print(xml.Header)
}

クイックチェック

xml構造体タグの,attrオプションは何をしますか?

まとめ

encoding/xmlには次の特徴があります。

  • xml.Marshal / Unmarshalはjson APIと同様に動作します
  • xmlタグで要素名を指定し、,attrで属性にします
  • XMLNameでルートを設定し、スライスで要素を繰り返します

よくある質問

「encoding/xml」レッスンは無料ですか?

はい。「encoding/xml」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Go Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Go Academyコースには全4レッスンが含まれています。

「encoding/xml」で何を学びますか?

XMLを扱います ブラウザで直接実行するハンズオンコードでGo Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Go Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのGo Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。

「encoding/xml」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このGo Academyレッスンでコードを書いて実行できますか?

はい。すべてのGo Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. encoding/jsonのおさらい
  2. encoding/xml
  3. encoding/csv
  4. gobとバイナリエンコーディング
← Go Academyに戻る