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 리포지토리에서 자유롭게 문제를 공개하세요.