gosax
— это библиотека Go для анализа XML SAX (Simple API for XML), поддерживающая функцию только для чтения. Эта библиотека предназначена для эффективного и бережного к памяти синтаксического анализа XML, черпая вдохновение из различных источников для обеспечения производительного синтаксического анализатора.
quick-xml
и pkg/json
.memchr
.gosax
с типами encoding/xml
, что упрощает интеграцию с существующим кодом, использующим стандартную библиотеку. 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
Чтобы установить gosax
, используйте go get
:
go get github.com/orisano/gosax
Вот базовый пример использования gosax
для анализа 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>
}
Важное примечание для пользователей кодирования/xml:
При переходе
encoding/xml
наgosax
обратите внимание, что самозакрывающиеся теги обрабатываются по-другому. Чтобы имитировать поведениеencoding/xml
, установите дляgosax.Reader.EmitSelfClosingTag
значениеtrue
. Это гарантирует правильное распознавание и обработку самозакрывающихся тегов.
Если вы привыкли кодировать Token
encoding/xml
, начните с gosax.TokenE
. Примечание. Использование gosax.TokenE
и gosax.Token
предполагает выделение памяти из-за интерфейсов.
До:
var dec * xml. Decoder
for {
tok , err := dec . Token ()
if err == io . EOF {
break
}
// ...
}
После:
var dec * gosax. Reader
for {
tok , err := gosax . TokenE ( dec . Event ())
if err == io . EOF {
break
}
// ...
}
xmlb
— это расширение для gosax
, упрощающее переписывание кода encoding/xml
. Он обеспечивает более высокопроизводительный мост для анализа и обработки XML.
До:
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 :
// ...
}
}
После:
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 ()
// ...
}
}
Эта библиотека лицензируется на условиях, указанных в файле LICENSE.
gosax
вдохновлен следующими проектами и ресурсами:
Вклады приветствуются! Пожалуйста, создайте репозиторий и отправьте запросы на включение.
Если у вас есть какие-либо вопросы или отзывы, смело открывайте проблему в репозитории GitHub.