diff --git a/node.go b/node.go index 5327b39..873cedd 100644 --- a/node.go +++ b/node.go @@ -383,15 +383,13 @@ func (this *Node) SelectNodesRecursive(namespace, name string) []*Node { } func rec_SelectNodes(cn *Node, namespace, name string, list *[]*Node, recurse bool) { - if (namespace == "*" || cn.Name.Space == namespace) && (name == "*" || cn.Name.Local == name) { - *list = append(*list, cn) - if !recurse { - return - } - } - for _, v := range cn.Children { - rec_SelectNodes(v, namespace, name, list, recurse) + if (namespace == "*" || v.Name.Space == namespace) && (name == "*" || v.Name.Local == name) { + *list = append(*list, v) + } + if recurse { + rec_SelectNodes(v, namespace, name, list, recurse) + } } } diff --git a/xmlx_test.go b/xmlx_test.go index 5dd8b82..d2c863e 100644 --- a/xmlx_test.go +++ b/xmlx_test.go @@ -28,8 +28,7 @@ func TestWildcard(t *testing.T) { return } - list := doc.SelectNodes("ns", "*") - + list := doc.SelectNode("", "xml").SelectNodes("ns", "*") if len(list) != 1 { t.Errorf("Wrong number of child elements. Expected 1, got %d.", len(list)) return @@ -94,11 +93,26 @@ func TestNodeSearch(t *testing.T) { return } - nodes := doc.SelectNodes("", "item") + nodes := doc.SelectNodesRecursive("", "item") if len(nodes) == 0 { t.Errorf("SelectNodes(): no nodes found.") return } + + ch := doc.SelectNode("", "channel") + // Test that SelectNodes doesn't accidentally do recursive + links := ch.SelectNodes("", "link") + if len(links) != 1 { + t.Errorf("SelectNodes(): Expected 1, Got %d", len(links)) + return + } + + // Test SelectNodesRecursive does indeed get all of them + links = ch.SelectNodesRecursive("", "link") + if len(links) != 8 { + t.Errorf("SelectNodesRecursive(): Expected 8, Got %d", len(links)) + return + } } type Image struct {