gosax
เป็นไลบรารี Go สำหรับการแยกวิเคราะห์ XML SAX (Simple API สำหรับ 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