gosax
es una biblioteca Go para análisis XML SAX (API simple para XML), que admite la funcionalidad de solo lectura. Esta biblioteca está diseñada para un análisis XML eficiente y consciente de la memoria, inspirándose en varias fuentes para proporcionar un analizador eficaz.
quick-xml
y pkg/json
para un alto rendimiento.memchr
.gosax
con tipos encoding/xml
, lo que facilita la integración con el código existente que utiliza la biblioteca estándar. 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
A continuación se muestra un ejemplo básico de cómo utilizar gosax
para analizar un 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 usuarios de codificación/xml:
Al migrar de
encoding/xml
agosax
, tenga en cuenta que las etiquetas de cierre automático se manejan de manera diferente. Para imitar el comportamientoencoding/xml
, establezcagosax.Reader.EmitSelfClosingTag
entrue
. Esto garantiza que las etiquetas de cierre automático se reconozcan y procesen correctamente.
Si está acostumbrado a codificar el Token
encoding/xml
, comience con gosax.TokenE
. Nota: El uso de gosax.TokenE
y gosax.Token
implica la asignación de memoria debido a las interfaces.
Antes:
var dec * xml. Decoder
for {
tok , err := dec . Token ()
if err == io . EOF {
break
}
// ...
}
Después:
var dec * gosax. Reader
for {
tok , err := gosax . TokenE ( dec . Event ())
if err == io . EOF {
break
}
// ...
}
xmlb
es una extensión para gosax
para simplificar la reescritura de código desde encoding/xml
. Proporciona un puente de mayor rendimiento para el análisis y procesamiento 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 :
// ...
}
}
Después:
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 tiene licencia según los términos especificados en el archivo LICENCIA.
gosax
se inspira en los siguientes proyectos y recursos:
¡Las contribuciones son bienvenidas! Bifurque el repositorio y envíe solicitudes de extracción.
Si tiene alguna pregunta o comentario, no dude en abrir un problema en el repositorio de GitHub.