Go
XML

[golang]XMLを読む(SAX風)

More than 5 years have passed since last update.

encoding/xmlパッケージはmarshalとunmarshal以外にも
普通にXMLファイルを読むのにも使える。

import (
  "encoding/xml"
  "io"
)
//io.ReaderをDecoderに渡す
d := xml.NewDecoder(reader) 
for {
        token, err := d.Token()
        if err == io.EOF {
            err = nil
            break
        }
        if err != nil {
            panic(err)
        }
        switch token.(type) {
        case xml.StartElement:
            //do something
        case xml.EndElement:
            //do something
        case xml.CharData:
            //do something
        case xml.Comment:
            //do something
        case xml.ProcInst:
            //do something
        case xml.Directive:
            //do something
        default:
            panic("unknown xml token.")
        }
}

strictでないHTMLを読むなら

d.Strict = false
d.AutoClose = xml.HTMLAutoClose
d.Entity = xml.HTMLEntity

とかやると幸せになれそう。

Handler作ればSAXParserみたいのも作れる。
https://github.com/kokardy/saxlike

・・・・・・のだけど、本当はDOM(みたいなの)が欲しい。