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
. وهذا يضمن التعرف على علامات الإغلاق الذاتي ومعالجتها بشكل صحيح.
إذا كنت معتادًا على encoding/xml
Token
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 ()
// ...
}
}
هذه المكتبة مرخصة بموجب الشروط المحددة في ملف الترخيص.
gosax
مستوحى من المشاريع والموارد التالية:
المساهمات هي موضع ترحيب! يرجى تفرع المستودع وإرسال طلبات السحب.
إذا كانت لديك أي أسئلة أو تعليقات، فلا تتردد في فتح مشكلة في مستودع GitHub.