ホーム プログラミング言語 golang go file processing Go 言語での XML ファイルの読み取りおよび書き込み操作






Go 言語での XML ファイルの読み取りおよび書き込み操作




 
 
XML (Extensible Markup Language) 形式は、データ交換形式として広く使用されており、独自のファイル形式です。 XML は、前のセクションで紹介したJSONよりもはるかに複雑で、手動で記述するのは比較的面倒です。

 

XML は、JSON が現在ほど広く使用されていなかったときに非常に広く使用されていました。データ交換や情報伝達のフォーマットとしてXMLは今でも広く使われており、現在では多くのオープンプラットフォームインターフェースが基本的にXMLフォーマットをサポートしています。

Go 言語の組み込みの encoding/xml パッケージは、encoding/json パッケージと同様の方法で、構造体と XML 形式の間でエンコードおよびデコードするために使用できます。ただし、XML のエンコードとデコードは、機能的には JSON よりも要求が厳しくなります。これは、エンコーディング/xml パッケージでは、構造体のフィールドに整形式のタグが含まれる必要があるのに対し、JSON 形式ではその必要がないためです。

XMLファイルを書き込む

encoidng/xml パッケージを使用すると、XML データをファイルに非常に簡単に保存できます。サンプル コードは次のとおりです。

package main

import (
    "encoding/xml"
    "fmt"
    "os"
)

type Website struct {
    Name   string `xml:"name,attr"`
    Url    string
    Course []string
}

func main{
    //オブジェクトのインスタンス化
    info:=ウェブサイト{"IT基礎", "https://it-kiso.com/golang/", []string{"Go言語入門チュートリアル", "Golang入門チュートリアル"}}
    f、err:= os.Create("./info.xml")
    if err!= nil {
        fmt.Println("ファイルの作成に失敗しました", err.Error())
        return
    }
    defer f.Close()
    //ファイルへのシリアル化
    encoder:= xml.NewEncoder(f)
    err = encoder.Encode(info)
    if err!= nil {
        fmt.Println("エンコードエラー:", err.Error())
        return
    } else {
        fmt.Println("エンコード成功")
    }
} 

上記のコードを実行すると、現在のディレクトリに info.xml ファイルが生成されます。ファイルの内容は次のとおりです。

<Website name=”IT基礎”>
    <Url>https://it-kiso.com/golang/</Url>
    <Course>Go言語入門チュートリアル</Course>
    <Course>Golang入門チュートリアル</Course>
</Website>

XMLファイルを読み取る

XML ファイルの読み取りは、特に一部のカスタム フィールド (日付など) を処理する必要がある場合、XML ファイルの書き込みよりも若干複雑です。ただし、合理的な XML タグ付き構造を使用すれば、複雑なことはありません。サンプルコードは次のとおりです。

package main

import (
 "encoding/xml"
 "fmt"
 "os"
)

type Website struct {
 Name string `xml:"name,attr"`
 Url string
 Course []string
}

func main() {
 // XML ファイルを開く
 file、err:= os.Open("./info.xml")
 if err != nil: {
   Printf("ファイルを開けなかった:%v", err)
return } defer file.Close() info:= Website{} decoder:= xml.NewDecoder(file) err = decoder.Decode(&info) if err:!= nill { fmt.Printf("解析エラー:%v", err) return } else { fmt.Println("OK") fmt.Println(info) } }

XML を記述するときと同様に、読み取った XML データのエスケープを気にする必要はありません。xml.NewDecoder.Decode() 関数がこれを自動的に処理します。

XML パッケージは、ネストなどのより複雑なタグもサポートしています。たとえば、「xml:”Books>Author”」という名前のタグは、<Books><Author>content</Author></Books> のような XML コンテンツを生成します。同時に、パッケージは「xml:”、attr”」に加えて、フィールドを文字データとして書き込むための「xml:”、chardata”」のようなタグもサポートします。また、「xml:”、innerxml」のようなタグもサポートします。 ‘ はフィールドを文字通りに記述することを意味し、’xml:”,comment”‘ のようなタグはフィールドを XML コメントとして扱うことを意味します。したがって、タグ付き構造を使用することで、これらの便利なエンコードおよびデコード機能を最大限に活用しながら、XML データの読み書きを合理的に制御することができます。

 

「 Go 言語での XML ファイルの読み取りおよび書き込み操作」についてわかりやすく解説!絶対に観るべきベスト2動画

Golang アプリケーションで XML データを解析する
How to read and write xml file in Golang 1.20