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(みたいなの)が欲しい。