gosax

gosax is a Go library for XML SAX (Simple API for XML) parsing, supporting read-only functionality. This library is designed for efficient and memory-conscious XML parsing, drawing inspiration from various sources to provide a performant parser.

Features

Read-only SAX parsing : Stream and process XML documents without loading the entire document into memory.

: Stream and process XML documents without loading the entire document into memory. Efficient parsing : Utilizes techniques inspired by quick-xml and pkg/json for high performance.

: Utilizes techniques inspired by and for high performance. SWAR (SIMD Within A Register) : Optimizations for fast text processing, inspired by memchr .

: Optimizations for fast text processing, inspired by . Compatibility with encoding/xml: Includes utility functions to bridge gosax types with encoding/xml types, facilitating easy integration with existing code that uses the standard library.

Installation

To install gosax , use go get :

go get github.com/orisano/gosax

Usage

Here is a basic example of how to use gosax to parse an XML document:

package main import ( "fmt" "log" "strings" "github.com/orisano/gosax" ) func main () { xmlData := `<root><element>Value</element></root>` reader := strings . NewReader ( xmlData ) r := gosax . NewReader ( reader ) for { e , err := r . Event () if err != nil { log . Fatal ( err ) } if e . Type () == gosax . EventEOF { break } fmt . Println ( string ( e . Bytes )) } // Output: // <root> // <element> // Value // </element> // </root> }

Bridging with encoding/xml

gosax provides utility functions to convert its types to encoding/xml types:

This allows for easy integration with existing code that uses the standard library's XML package.

import ( "encoding/xml" "github.com/orisano/gosax" ) // ... event , _ := r . Event () if event . Type () == gosax . EventStart { startElement , err := gosax . StartElement ( event . Bytes ) // Now you can use startElement as an xml.StartElement // ... }

License

This library is licensed under the terms specified in the LICENSE file.

Acknowledgements

gosax is inspired by the following projects and resources:

Contributing

Contributions are welcome! Please fork the repository and submit pull requests.

Contact

For any questions or feedback, feel free to open an issue on the GitHub repository.