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
、 encoding/xml
からのコードの書き換えを簡素化するためのgosax
の拡張機能です。 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 リポジトリで問題を開いてください。