Проблема сжатия xml в gzip без использования пакета "encoding / xml" - PullRequest
4 голосов
/ 21 января 2020

Я работаю над программой, которая сжимает xml файлы в gzip с использованием Go.

, но программе не удалось сгенерировать файлы, однако она генерирует выходные данные, когда я пытаюсь преобразовать файл .txt в gzip, и мне не нужно использовать пакет encoding / xml. Вот моя программа: -

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)
    }

}

Что я должен сделать для создания нужного мне файла .gz.

1 Ответ

1 голос
/ 21 января 2020

попробуйте так:

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)
    }

}

Содержимое демо. xml:

<?xml version="1.0" encoding="UTF-8"?>
<to>prakashsharmacs24@gmail.com</priority>
<from>demo@gmail.com</tgppmccmnc>
<Heading>Test</rgid>
<Body>Test</serviceclass>
...