package ingest import ( "encoding/xml" "io" "os" ) type Page struct { Title string `xml:"title"` Text string `xml:"revision>text"` Id int `xml:"id"` } func WikiDump(filePath string, jobQueue chan<- Page, onProgress func()) error { file, err := os.Open(filePath) if err != nil { return err } defer file.Close() decoder := xml.NewDecoder(file) for { t, err := decoder.Token() if err == io.EOF { break } if err != nil { return err } switch se := t.(type) { case xml.StartElement: if se.Name.Local == "page" { var p Page if err := decoder.DecodeElement(&p, &se); err == nil { jobQueue <- p if onProgress != nil { onProgress() } } } } } return nil }