问题
I am working on a program that compresses xml files to gzip using Go.
but the program failed to generate files, however it does generate the output when I try to convert .txt file to gzip and I don't have to use encoding/xml package. Here is my program:-
package main
import (
"bytes"
"compress/gzip"
"fmt"
"io"
"log"
"os"
)
type Notes struct {
To string `xml:"to"`
From string `xml:"from"`
Heading string `xml:"heading"`
Body string `xml:"body"`
}
func main() {
var buf bytes.Buffer
zw := gzip.NewWriter(&buf)
// Setting the Header fields is optional.
zw.Name = "new.xml"
_, err := zw.Write([]byte("Compressing"))
if err != nil {
log.Fatal(err)
}
if err := zw.Close(); err != nil {
log.Fatal(err)
}
zr, err := gzip.NewReader(&buf)
if err != nil {
log.Fatal(err)
}
fmt.Printf("Name: %s", zr.Name)
if _, err := io.Copy(os.Stdout, zr); err != nil {
log.Fatal(err)
}
if err := zr.Close(); err != nil {
log.Fatal(err)
}
}
What should I do for generating the .gz file I desire.
回答1:
try this way:
func main() {
var buf bytes.Buffer
zw := gzip.NewWriter(&buf)
zw.Name = "new.xml"
xmlFile, err := os.Open("/home/prakash/Desktop/demo.xml")
if err != nil {
fmt.Println(err)
}
defer xmlFile.Close()
byteValue, _ := ioutil.ReadAll(xmlFile)
i, err := zw.Write(byteValue)
if err != nil {
log.Fatal(err)
}
fmt.Println(i)
if err := zw.Close(); err != nil {
log.Fatal(err)
}
zr, err := gzip.NewReader(&buf)
if err != nil {
log.Fatal(err)
}
fmt.Printf("Name: %s", zr.Name)
if _, err := io.Copy(os.Stdout, zr); err != nil {
log.Fatal(err)
}
if err := zr.Close(); err != nil {
log.Fatal(err)
}
}
Content of demo.xml:
<?xml version="1.0" encoding="UTF-8"?>
<to>prakashsharmacs24@gmail.com</priority>
<from>demo@gmail.com</tgppmccmnc>
<Heading>Test</rgid>
<Body>Test</serviceclass>
来源:https://stackoverflow.com/questions/59839016/problem-in-compressing-xml-to-gzip-without-using-encoding-xml-package