Popularity
1.6
Growing
Activity
5.8
-
11
2
1

Programming language: Go
Tags: XML    

xmlwriter alternatives and similar packages

Based on the "XML" category

Do you think we are missing an alternative of xmlwriter or a related project?

Add another 'XML' Package

README

xmlwriter

GoDoc Go

xmlwriter is a pure-Go library providing a procedural XML generation API based on libxml2's xmlwriter module. The package is extensively documented at GoDoc.

Quick example:

func main() {
    b := &bytes.Buffer{}
    w := xmlwriter.Open(b)
    ec := &xmlwriter.ErrCollector{}
    defer ec.Panic()

    ec.Do(
        w.StartDoc(xmlwriter.Doc{})
        w.StartElem(xmlwriter.Elem{Name: "foo"})
        w.WriteAttr(xmlwriter.Attr{Name: "a1", Value: "val1"})
        w.WriteAttr(xmlwriter.Attr{Name: "a2", Value: "val2"})
        w.WriteComment(xmlwriter.Comment{"hello"})
        w.StartElem(xmlwriter.Elem{Name: "bar"})
        w.WriteAttr(xmlwriter.Attr{Name: "a1", Value: "val1"})
        w.WriteAttr(xmlwriter.Attr{Name: "a2", Value: "val2"})
        w.StartElem(xmlwriter.Elem{Name: "baz"})
        w.EndAllFlush()
    )
    fmt.Println(b.String())
}

xmlwriter is about twice as quick as using the stdlib's encoding/xml and offers total control of the output. If you don't require that level of control, it's probably better to stick with encoding/xml

BenchmarkWriterHuge-8            165       7189290 ns/op        4944 B/op          4 allocs/op
BenchmarkWriterSmall-8        299679          4035 ns/op        4944 B/op          4 allocs/op
BenchmarkGolangHuge-8             52      21770422 ns/op     4324496 B/op      60008 allocs/op
BenchmarkGolangSmall-8        139767          8828 ns/op        5936 B/op         28 allocs/op

xmlwriter is exhaustively tested using a fairly insane mess of C scripts you can find in the tester/ directory.

License

xmlwriter uses the Apache License 2.0. I pulled in about 60 lines of code from the xml/encoding package in the Go sources and retained the copyright. Not sure the exact implications, IANAL. Please file an issue if I've done something wrong.


*Note that all licence references and agreements mentioned in the xmlwriter README section above are relevant to that project's source code only.