環境
做法
當讀取大型 XML 檔案時,應避免使用 ioutil.ReadAll() 和 xml.Unmarshal() 方法,而是使用 xml.Decoder.Token() 方法,來達到串流處理。
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 
 | resource := "file.xml"
 file, err := os.Open(resource)
 defer file.Close()
 
 if err != nil {
 log.Fatalln(err.Error())
 return
 }
 
 
 decoder := xml.NewDecoder(file)
 
 for {
 
 token, err := decoder.Token()
 
 
 if err == io.EOF {
 break
 }
 
 
 if err != nil {
 log.Fatalln(err.Error())
 return
 }
 
 
 if token == nil {
 break
 }
 
 
 switch element := token.(type) {
 case xml.StartElement:
 
 switch element.Name.Local {
 case "Record":
 record := Record{}
 
 if err = decoder.DecodeElement(&record, &element); err != nil {
 log.Fatalln(err.Error())
 return
 }
 
 
 }
 }
 }
 
 | 
參考資料