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と表示される
}

KHI入社して退社。今はCONFRAGEで正社員です。関西で140-170/80~120万から受け付けております^^
得意技はJS(ES20xx),Java,AWSの大体のリソースです
コメントはやさしくお願いいたします^^
座右の銘は、「狭き門より入れ」「願わくは、我に七難八苦を与えたまえ」です^^



コメント