Skip to content

Instantly share code, notes, and snippets.

@lonelycode
Created June 1, 2016 11:13
Show Gist options
  • Save lonelycode/3825017857ba753cdba3fcbbd199cfc1 to your computer and use it in GitHub Desktop.
Save lonelycode/3825017857ba753cdba3fcbbd199cfc1 to your computer and use it in GitHub Desktop.
XML transform templates / Dot-notation Demo
<?xml version="1.0" encoding="utf-8"?>
<servers version="1">
<server>
<serverName>Shanghai_VPN</serverName>
<serverIP>127.0.0.1</serverIP>
</server>
<server>
<serverName>Beijing_VPN</serverName>
<serverIP>127.0.0.2</serverIP>
</server>
</servers>
package main
import (
"fmt"
"github.com/clbanning/mxj"
"html/template"
"io/ioutil"
"os"
)
var page = `
{{range $x, $s := .servers.server}}
{{$s.serverName}}: $s.serverIP
{{end}}
`
func main() {
file, err := os.Open("demo.xml") // For read access.
if err != nil {
fmt.Printf("error: %v", err)
return
}
defer file.Close()
data, err := ioutil.ReadAll(file)
if err != nil {
fmt.Printf("error: %v", err)
return
}
v, err := mxj.NewMapXml(data) // unmarshal
if err != nil {
fmt.Printf("error unmarshalling: %v", err)
return
}
tmpl := template.New("page")
var tErr error
if tmpl, tErr = tmpl.Parse(page); tErr != nil {
fmt.Println(tErr)
return
}
tmpl.Execute(os.Stdout, v)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment