diff --git a/node.go b/node.go index 2a2193e..5972d05 100644 --- a/node.go +++ b/node.go @@ -396,13 +396,15 @@ 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 { - if (namespace == "*" || v.Name.Space == namespace) && (name == "*" || v.Name.Local == name) { - *list = append(*list, v) - } - if recurse { - rec_SelectNodes(v, namespace, name, list, recurse) - } + rec_SelectNodes(v, namespace, name, list, recurse) } } diff --git a/xmlx_test.go b/xmlx_test.go index cca5253..1da420b 100644 --- a/xmlx_test.go +++ b/xmlx_test.go @@ -28,7 +28,8 @@ func TestWildcard(t *testing.T) { return } - list := doc.SelectNode("", "xml").SelectNodes("ns", "*") + list := doc.SelectNodes("ns", "*") + if len(list) != 1 { t.Errorf("Wrong number of child elements. Expected 1, got %d.", len(list)) return @@ -93,24 +94,17 @@ func TestNodeSearch(t *testing.T) { return } - nodes := doc.SelectNodesRecursive("", "item") + nodes := doc.SelectNodes("", "item") if len(nodes) == 0 { t.Errorf("SelectNodes(): no nodes found.") return } ch := doc.SelectNode("", "channel") - // Test that SelectNodes doesn't accidentally do recursive + // Test that SelectNodes properly selects multiple nodes 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)) + t.Errorf("SelectNodes(): Expected 8, Got %d", len(links)) return } }