0
Goアーカイブのzipおよびencoding/xmlパッケージを使用して、いくつかのXMLファイルを含むzipファイルがあります。私がしたいことは、a.xml
のタイプを-i.eにアンマーシャリングすることです。内のすべてのファイルを経由せずにループ:特定のXMLファイルを解凍せずにzipから非マーシャル化
test.zip
├ a.xml
├ b.xml
└ ...
a.xml
のような構造を持っているでしょう:
<?xml version="1.0" encoding="UTF-8"?>
<root>
<app>
<code>0001</code>
<name>Some Test App</name>
</app>
<app>
<code>0002</code>
<name>Another Test App</name>
</app>
</root>
どのように選択のために、その名前のために、コメントアウト行にパラメータとして提供されているファイルをアンマーシャリングインスタンス:
package marshalutils
import (
"archive/zip"
"log"
"fmt"
"encoding/xml"
)
type ApplicationRoot struct {
XMLName xml.Name `xml:"root"`
Applications []Application `xml:"app"`
}
type Application struct {
Code string `xml:"code"`
Name string `xml:"name"`
}
func UnmarshalApps(zipPath string, fileName string) {
// Open a zip archive for reading.
reader, err := zip.OpenReader(zipFilePath)
if err != nil {
log.Fatal(`ERROR:`, err)
}
defer reader.Close()
/*
* U N M A R S H A L T H E G I V E N F I L E ...
* ... I N T O T H E T Y P E S A B O V E
*/
}
ドキュメントの例は、['zip.Reader'](https://golang.org/pkg/archive/zip/#example_Reader)の使用方法を示しています。あなたが望まないファイルを飛ばしてください。 – JimB
だから、ループせずに名前を確認することもできません。 – vahdet
zipファイルにはファイル名のリストが含まれています。あなたはそのリストをループせずにリスト内の名前をどのように探すでしょうか?あなたはすべてのファイルを抽出する必要はなく、ドキュメントのその例のように名前をループします。 – JimB