私は、XML をローカル ファイルと S3 バケットに同時に書き込むストリーミング XML エンコーダーに取り組んでいます。ただし、2 つのローカル ファイルへの書き込みをテストするだけで、ファイルの 1 つに毎回終了タグがないことがわかります。
これが大まかな方法です(エラー処理を省略しています):
func copyToFile (fileName string) {
f, _ := os.Create(fileName)
defer f.Close()
io.Copy(f, pr)
}
func main () {
pr, pw := io.Pipe()
defer pw.Close()
encoder := xml.NewEncoder(pw)
go copyToFile("file1.xml")
go copyToFile("file2.xml")
encoder.EncodeToken(xml.StartElement{...})
encoder.Encode(SomeStruct{})
encoder.EncodeToken(xml.EndElement{...})
encoder.Flush()
}
の結果file1.xml
は期待どおりで、すべてのタグが適切に閉じられていますがfile2.xml
、終了タグ ( の呼び出しencoder.EncodeToken(xml.EndElement{...})
) が欠落しています。
私は何を間違っていますか?リーダーを S3 にコピーすると、同じ結果を期待できますか?