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フィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- encoding/jsonのおさらい
- encoding/xml
- encoding/csv
- gobとバイナリエンコーディング