gosax
1.0.0
gosax
是一个用于 XML SAX(Simple API for XML)解析的 Go 库,支持只读功能。该库专为高效且内存敏感的 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
。这可确保自动关闭标签被正确识别和处理。
如果您习惯encoding/xml
的Token
,请从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 存储库上提出问题。