gosax
est une bibliothèque Go pour l'analyse XML SAX (Simple API for XML), prenant en charge la fonctionnalité en lecture seule. Cette bibliothèque est conçue pour une analyse XML efficace et soucieuse de la mémoire, s'inspirant de diverses sources pour fournir un analyseur performant.
quick-xml
et pkg/json
pour des performances élevées.memchr
.gosax
avec les types encoding/xml
, facilitant ainsi une intégration facile avec le code existant qui utilise la bibliothèque standard. 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
Pour installer gosax
, utilisez go get
:
go get github.com/orisano/gosax
Voici un exemple de base de la façon d'utiliser gosax
pour analyser un document 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>
}
Remarque importante pour les utilisateurs d'encodage/xml :
Lors de la migration de
encoding/xml
versgosax
, notez que les balises à fermeture automatique sont gérées différemment. Pour imiter le comportementencoding/xml
, définissezgosax.Reader.EmitSelfClosingTag
surtrue
. Cela garantit que les étiquettes à fermeture automatique sont reconnues et traitées correctement.
Si vous êtes habitué à encoding/xml
's Token
, commencez par gosax.TokenE
. Remarque : L'utilisation gosax.TokenE
et gosax.Token
implique une allocation de mémoire en raison des interfaces.
Avant:
var dec * xml. Decoder
for {
tok , err := dec . Token ()
if err == io . EOF {
break
}
// ...
}
Après:
var dec * gosax. Reader
for {
tok , err := gosax . TokenE ( dec . Event ())
if err == io . EOF {
break
}
// ...
}
xmlb
est une extension pour gosax
pour simplifier la réécriture du code à partir de encoding/xml
. Il fournit un pont plus performant pour l'analyse et le traitement XML.
Avant:
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 :
// ...
}
}
Aprè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 ()
// ...
}
}
Cette bibliothèque est sous licence selon les termes spécifiés dans le fichier LICENSE.
gosax
s'inspire des projets et ressources suivants :
Les contributions sont les bienvenues ! Veuillez créer le référentiel et soumettre des demandes d'extraction.
Pour toute question ou commentaire, n'hésitez pas à ouvrir un ticket sur le référentiel GitHub.