Skip to content

Latest commit

 

History

536 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

parser-go-xml

Parser for XML in Go

import (
    "katydid.org.za/go/parser-go/cast"
	"katydid.org.za/go/parser-go/cp"
    "katydid.org.za/go/parser-go-xml/xml"
    "katydid.org.za/go/parser-go-xml/xml/parse"
)

func main() {
    xmlstr := `
		<Top>
			<Name>Katydid</Name>
			<Dragons alive="false">
				<Fire>true</Fire>
			</Dragons>
		</Top>`
	val, err := getName(xmlstr)
	if err != nil {
		t.Fatal(err)
	}
	println(val) // Katydid
}

func getName(xmlstr string) (string, error) {
	p := xml.NewParser()
	p.Init([]byte(xmlstr))

	p.Next()              // parse.EnterHint
	p.Next()              // parse.FieldHint Token: StringKind, "Top"
	p.Next()              // parse.EnterHint
	hint, err := p.Next() // parse.FieldHint Token: StringKind, "Name"
	if err != nil {
		panic(err)
	}
	if hint != parse.FieldHint {
		panic("expected field hint")
	}
	kind, val, err := p.Token()
	if err != nil {
		panic(err)
	}
	if kind != parse.StringKind {
		panic("expected string kind")
	}
	var s string
	cast.ToStringPtr(val, &s)
	if s != "Name" {
		panic("expected Name")
	}
	hint, err = p.Next() // parse.ValueHint Token: StringKind, "Katydid"
	if err != nil {
		panic(err)
	}
	if hint != parse.ValueHint {
		panic("expected field hint")
	}
	kind, val, err = p.Token()
	if err != nil {
		panic(err)
	}
	if kind != parse.StringKind {
		panic("expected string kind")
	}
	return cp.ToString(val), nil
}

About

Parser for XML in Go

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages