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 儲存庫上提出問題。