Skip to content

Instantly share code, notes, and snippets.

@ynyBonfennil
Last active December 17, 2018 03:08
Show Gist options
  • Save ynyBonfennil/0c509519aed4443d36abff2fb4e885b8 to your computer and use it in GitHub Desktop.
Save ynyBonfennil/0c509519aed4443d36abff2fb4e885b8 to your computer and use it in GitHub Desktop.
<?xml version="1.0" encoding="UTF-8"?>
<graphml xmlns="http://graphml.graphdrawing.org/xmlns"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://graphml.graphdrawing.org/xmlns
http://graphml.graphdrawing.org/xmlns/1.0/graphml.xsd">
<graph id="G" edgedefault="undirected">
<node id="n0"/>
<node id="n1"/>
<node id="n2"/>
<node id="n3"/>
<node id="n4"/>
<node id="n5"/>
<node id="n6"/>
<node id="n7"/>
<node id="n8"/>
<node id="n9"/>
<node id="n10"/>
<edge source="n0" target="n2"/>
<edge source="n1" target="n2"/>
<edge source="n2" target="n3"/>
<edge source="n3" target="n5"/>
<edge source="n3" target="n4"/>
<edge source="n4" target="n6"/>
<edge source="n6" target="n5"/>
<edge source="n5" target="n7"/>
<edge source="n6" target="n8"/>
<edge source="n8" target="n7"/>
<edge source="n8" target="n9"/>
<edge source="n8" target="n10"/>
</graph>
</graphml>
package main
import (
"fmt"
"os"
"log"
"io/ioutil"
"encoding/xml"
)
type GraphML struct {
XMLName xml.Name `xml:"graphml"` // Graph Name
Xml string `xml:",innerxml"` // Raw XML
Graph Graph `xml:"graph"` // element
}
type Graph struct {
Id string `xml:"id,attr"` // attribute
EdgeDefault string `xml:"edgedefault,attr"` // attribute
Nodes []Node `xml:"node"` // elements
Edges []Edge `xml:"edge"` // elements
}
type Node struct {
Id string `xml:"id,attr"` // attribute
}
type Edge struct {
Source string `xml:"source,attr"` // attribute
Target string `xml:"target,attr"` // attribute
}
func main() {
// Open and Read File
xmlFile, err := os.Open("./simple.graphml")
if err != nil {
log.Fatal(err)
return
}
defer xmlFile.Close()
xmlData, err := ioutil.ReadAll(xmlFile)
if err != nil {
log.Fatal(err)
return
}
// Unmarshal
var graphml GraphML
xml.Unmarshal(xmlData, &graphml)
// Print
fmt.Println(graphml.XMLName)
for _, node := range graphml.Graph.Nodes {
fmt.Printf("Node: %s\n", node.Id)
}
for _, edge := range graphml.Graph.Edges {
fmt.Printf("Edge: %s <=> %s\n", edge.Source, edge.Target)
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment