Go 言語でXMLファイルをgz形式で圧縮したファイルから特定のタグ内の値を取得する方法

Go 言語でXMLファイルをgz形式で圧縮したファイルから特定のタグ内の値を取得する方法

Go 言語でXMLファイルを扱いたい場合に、そのXMLファイルが圧縮されていても解凍せずに中身の値を取得することが可能です。

以下のようなXMLファイルがあるとします。

<?xml version="1.0"?>
<root>
<no>CA001</no>
<report-date>2017.07.05 01:00:00</report-date>
<test-data>
<type>1</type>
<cd>80</cd>
</test-data>
</root>

これをtest.gzとしてd:\sample\配下に圧縮して保存します。

以下のように構造体にタグを付ければ、そのタグ内の値を取得することができます。

package main

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

func main() {
  var file *os.File
  var err error

  type foo struct {
    No string `xml:"no"` // タグ付き構造体 先頭一文字は大文字である必要がある
  }
  v := foo{No: ""} // 構造体初期化

  if file, err = os.Open("D:\\sample\\test.gz"); err != nil {
    fmt.Printf("error: %v", err)
    return
  }
  defer file.Close()

  reader, err := gzip.NewReader(file)
  if err != nil {
    fmt.Printf("error: %v", err)
    return
  }
  defer reader.Close()

  err = xml.NewDecoder(reader).Decode(&v) // ストリームのまま扱う
  if err != nil {
    fmt.Printf("error: %v", err)
    return
  }
  fmt.Printf("no: %s\n", v.No) // CA001と表示される
}

参考サイト

Go 言語でXMLファイルをgz形式で圧縮したファイルから特定のタグ内の値を取得する方法

コメント

タイトルとURLをコピーしました