gosax
adalah pustaka Go untuk penguraian XML SAX (API Sederhana untuk XML), yang mendukung fungsionalitas hanya-baca. Pustaka ini dirancang untuk parsing XML yang efisien dan memperhatikan memori, mengambil inspirasi dari berbagai sumber untuk menyediakan parser yang berkinerja baik.
quick-xml
dan pkg/json
untuk kinerja tinggi.memchr
.gosax
dengan tipe encoding/xml
, memfasilitasi integrasi yang mudah dengan kode yang ada yang menggunakan perpustakaan standar. 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
Untuk menginstal gosax
, gunakan go get
:
go get github.com/orisano/gosax
Berikut adalah contoh dasar cara menggunakan gosax
untuk mengurai dokumen 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>
}
Catatan Penting untuk Pengguna pengkodean/xml:
Saat bermigrasi dari
encoding/xml
kegosax
, perhatikan bahwa tag penutup otomatis ditangani secara berbeda. Untuk meniru perilakuencoding/xml
, setelgosax.Reader.EmitSelfClosingTag
ketrue
. Hal ini memastikan tag yang dapat menutup sendiri dikenali dan diproses dengan benar.
Jika Anda terbiasa encoding/xml
Token
, mulailah dengan gosax.TokenE
. Catatan: Penggunaan gosax.TokenE
dan gosax.Token
melibatkan alokasi memori karena antarmuka.
Sebelum:
var dec * xml. Decoder
for {
tok , err := dec . Token ()
if err == io . EOF {
break
}
// ...
}
Setelah:
var dec * gosax. Reader
for {
tok , err := gosax . TokenE ( dec . Event ())
if err == io . EOF {
break
}
// ...
}
xmlb
adalah ekstensi untuk gosax
untuk menyederhanakan penulisan ulang kode dari encoding/xml
. Ini menyediakan jembatan berkinerja lebih tinggi untuk penguraian dan pemrosesan XML.
Sebelum:
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 :
// ...
}
}
Setelah:
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 ()
// ...
}
}
Perpustakaan ini dilisensikan berdasarkan ketentuan yang ditentukan dalam file LISENSI.
gosax
terinspirasi oleh proyek dan sumber daya berikut:
Kontribusi dipersilahkan! Silakan fork repositori dan kirimkan permintaan penarikan.
Untuk pertanyaan atau masukan apa pun, silakan buka terbitan di repositori GitHub.