Skip to content
This repository has been archived by the owner on Dec 30, 2022. It is now read-only.
/ go-xmlparse Public archive

Golang package for parsing xml data. DEPRECATED

License

Notifications You must be signed in to change notification settings

egnd/go-xmlparse

Repository files navigation

go-xmlparse

Go Reference Go Report Card Coverage Pipeline

DEPRECATED user https://github.com/egnd/go-toolbox/tree/master/xmlparse instead

Golang package for parsing xml data.

Examples:

package main

import (
	"encoding/xml"
	"io"

	"github.com/egnd/go-xmlparse"
	"github.com/egnd/go-xmlparse/fb2"
)

func main() {
	var reader io.Reader
	var fb2Doc fb2.File

	// get fb2 struct by xml decoder
	if err := xml.NewDecoder(reader).Decode(&fb2Doc); err != nil {
		panic(err)
	}

	// get fb2 struct by configured xml decoder
	if err := xmlparse.NewDecoder(reader).Decode(&fb2Doc); err != nil {
		panic(err)
	}

	// get fb2 struct by parsing
	if fb2Doc, err := fb2.NewFile(xmlparse.NewDecoder(reader)); err != nil {
		panic(err)
	}

	// get fb2 struct by parsing withour "binary" images
	if fb2Doc, err := fb2.NewFile(xmlparse.NewDecoder(reader),
		func(next xmlparse.TokenHandler) xmlparse.TokenHandler {
			return func(obj interface{}, node xml.StartElement, r xmlparse.TokenReader) (err error) {
				if _, ok := obj.(*fb2.File); ok && node.Name.Local == "binary" {
					return xmlparse.TokenSkip(node.Name.Local, r)
				}

				return next(obj, node, r)
			}
		},
	); err != nil {
		panic(err)
	}
}

Benchmarks:

goos: linux
goarch: amd64
pkg: github.com/egnd/go-xmlparse
cpu: AMD Ryzen 7 5800U with Radeon Graphics         

Benchmark_Decoders/xml-16                    40   45330854 ns/op   4719552 B/op   6126 allocs/op
Benchmark_Decoders/xmlparse-16               33   43500593 ns/op   4723757 B/op   6390 allocs/op

Benchmark_Parsers_XML/rules_0-16             40   28759416 ns/op   2280436 B/op   3711 allocs/op
Benchmark_Parsers_XML/rules_1-16             55   31546185 ns/op   2280525 B/op   3719 allocs/op
Benchmark_Parsers_XML/rules_10-16            42   27412632 ns/op   2281527 B/op   3791 allocs/op
Benchmark_Parsers_XML/rules_100-16           52   29062773 ns/op   2292956 B/op   4510 allocs/op
Benchmark_Parsers_XML/rules_500-16           39   29684596 ns/op   2344098 B/op   7711 allocs/op
Benchmark_Parsers_XML/rules_1000-16          48   30376356 ns/op   2408053 B/op  11710 allocs/op

Benchmark_Parsers_XMLParsing/rules_0-16      56   30635241 ns/op   2284448 B/op   3975 allocs/op
Benchmark_Parsers_XMLParsing/rules_1-16      55   30133415 ns/op   2284929 B/op   3983 allocs/op
Benchmark_Parsers_XMLParsing/rules_10-16     55   29089623 ns/op   2285676 B/op   4054 allocs/op
Benchmark_Parsers_XMLParsing/rules_100-16    50   26225184 ns/op   2297209 B/op   4775 allocs/op
Benchmark_Parsers_XMLParsing/rules_500-16    54   30522089 ns/op   2348453 B/op   7975 allocs/op
Benchmark_Parsers_XMLParsing/rules_1000-16   38   32811054 ns/op   2412510 B/op  11975 allocs/op