initial
This commit is contained in:
47
vendor/github.com/basgys/goxml2json/struct.go
generated
vendored
Executable file
47
vendor/github.com/basgys/goxml2json/struct.go
generated
vendored
Executable file
@@ -0,0 +1,47 @@
|
||||
package xml2json
|
||||
|
||||
import (
|
||||
"strings"
|
||||
)
|
||||
|
||||
// Node is a data element on a tree
|
||||
type Node struct {
|
||||
Children map[string]Nodes
|
||||
Data string
|
||||
ChildrenAlwaysAsArray bool
|
||||
}
|
||||
|
||||
// Nodes is a list of nodes
|
||||
type Nodes []*Node
|
||||
|
||||
// AddChild appends a node to the list of children
|
||||
func (n *Node) AddChild(s string, c *Node) {
|
||||
// Lazy lazy
|
||||
if n.Children == nil {
|
||||
n.Children = map[string]Nodes{}
|
||||
}
|
||||
|
||||
n.Children[s] = append(n.Children[s], c)
|
||||
}
|
||||
|
||||
// IsComplex returns whether it is a complex type (has children)
|
||||
func (n *Node) IsComplex() bool {
|
||||
return len(n.Children) > 0
|
||||
}
|
||||
|
||||
// GetChild returns child by path if exists. Path looks like "grandparent.parent.child.grandchild"
|
||||
func (n *Node) GetChild(path string) *Node {
|
||||
result := n
|
||||
names := strings.Split(path, ".")
|
||||
for _, name := range names {
|
||||
children, exists := result.Children[name]
|
||||
if !exists {
|
||||
return nil
|
||||
}
|
||||
if len(children) == 0 {
|
||||
return nil
|
||||
}
|
||||
result = children[0]
|
||||
}
|
||||
return result
|
||||
}
|
||||
Reference in New Issue
Block a user