gosax
é uma biblioteca Go para análise XML SAX (Simple API for XML), com suporte para funcionalidade somente leitura. Esta biblioteca foi projetada para análise XML eficiente e com foco na memória, inspirando-se em várias fontes para fornecer um analisador de alto desempenho.
quick-xml
e pkg/json
para alto desempenho.memchr
.gosax
com tipos encoding/xml
, facilitando a integração fácil com código existente que usa a biblioteca padrão. goos: darwin
goarch: arm64
pkg: github.com/orisano/gosax
BenchmarkReader_Event-12 5 211845800 ns/op 1103.30 MB/s 2097606 B/op 6 allocs/op
Para instalar gosax
, use go get
:
go get github.com/orisano/gosax
Aqui está um exemplo básico de como usar gosax
para analisar um documento XML:
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>
}
Nota importante para usuários de codificação/xml:
Ao migrar de
encoding/xml
paragosax
, observe que as tags de fechamento automático são tratadas de maneira diferente. Para imitar o comportamentoencoding/xml
, definagosax.Reader.EmitSelfClosingTag
comotrue
. Isso garante que as tags de fechamento automático sejam reconhecidas e processadas corretamente.
Se você está acostumado com Token
de encoding/xml
, comece com gosax.TokenE
. Nota: Usar gosax.TokenE
e gosax.Token
envolve alocação de memória devido a interfaces.
Antes:
var dec * xml. Decoder
for {
tok , err := dec . Token ()
if err == io . EOF {
break
}
// ...
}
Depois:
var dec * gosax. Reader
for {
tok , err := gosax . TokenE ( dec . Event ())
if err == io . EOF {
break
}
// ...
}
xmlb
é uma extensão do gosax
para simplificar a reescrita do código de encoding/xml
. Ele fornece uma ponte de alto desempenho para análise e processamento de XML.
Antes:
var dec * xml. Decoder
for {
tok , err := dec . Token ()
if err == io . EOF {
break
}
switch t := tok .( type ) {
case xml. StartElement :
// ...
case xml. CharData :
// ...
case xml. EndElement :
// ...
}
}
Depois:
var dec * xmlb. Decoder
for {
tok , err := dec . Token ()
if err == io . EOF {
break
}
switch tok . Type () {
case xmlb . StartElement :
t , _ := tok . StartElement ()
// ...
case xmlb . CharData :
t , _ := tok . CharData ()
// ...
case xmlb . EndElement :
t := tok . EndElement ()
// ...
}
}
Esta biblioteca está licenciada sob os termos especificados no arquivo LICENSE.
gosax
é inspirado nos seguintes projetos e recursos:
Contribuições são bem-vindas! Bifurque o repositório e envie solicitações pull.
Para qualquer dúvida ou feedback, sinta-se à vontade para abrir um problema no repositório GitHub.