Skip to content

tsak/xml-stream-parser

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

7 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

xml stream parser

xml-stream-parser is xml parser for GO. It is efficient to parse large xml data with streaming fashion.

Usage

<?xml version="1.0" encoding="UTF-8"?>
<bookstore>
   <book>
      <title>The Iliad and The Odyssey</title>
      <price>12.95</price>
      <comments>
         <userComment rating="4">Best translation I've read.</userComment>
         <userComment rating="2">I like other versions better.</userComment>
      </comments>
   </book>
   <book>
      <title>Anthology of World Literature</title>
      <price>24.95</price>
      <comments>
         <userComment rating="3">Needs more modern literature.</userComment>
         <userComment rating="4">Excellent overview of world literature.</userComment>
      </comments>
   </book>
</bookstore>

Stream over books

f, _ := os.Open("input.xml")
br := bufio.NewReaderSize(f,8192)
parser := pr.NewXmlParser(br, "books")

for xml := range *parser.Stream() {
	fmt.Println(xml.Childs["title"][0].InnerText)
	fmt.Println(xml.Childs["comments"][0].Childs["userComment"][0].Attrs["rating"])
	fmt.Println(xml.Childs["comments"][0].Childs["userComment"][0].InnerText)
}
   

Skip tags for speed

parser := pr.NewXmlParser(br, "books").SkipElements([]string{"price", "comments"})

Error handlings

for xml := range *parser.Stream() {
   if xml.Err !=nil { 
      // handle error
   }
}

Progress of parsing

// total byte read to calculate the progress of parsing
parser.TotalReadSize

If you interested check also json parser which works similarly

About

XML stream parser for GO

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Go 100.0%