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..201061d 100644 --- a/xmlx_test.go +++ b/xmlx_test.go @@ -28,10 +28,10 @@ func TestWildcard(t *testing.T) { return } - list := doc.SelectNodes("ns", "*") + list := doc.SelectNodesRecursive("ns", "*") - if len(list) != 1 { - t.Errorf("Wrong number of child elements. Expected 1, got %d.", len(list)) + if len(list) != 7 { + t.Errorf("Wrong number of child elements. Expected 7, got %d.", len(list)) return } } @@ -94,13 +94,36 @@ 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 } } +func TestSelectNodes(t *testing.T) { + doc := New() + + if err := doc.LoadFile("test1.xml", nil); err != nil { + t.Errorf("LoadFile(): %s", err) + return + } + + ch := doc.SelectNode("", "channel") + + topLevelLinks := ch.SelectNodes("", "link") + if len(topLevelLinks) != 1 { + t.Errorf("SelectNodes(): Expected 1, Got %d", len(topLevelLinks)) + return + } + + allLinks := ch.SelectNodesRecursive("", "link") + if len(allLinks) != 8 { + t.Errorf("SelectNodes(): Expected 8, Got %d", len(allLinks)) + return + } +} + type Image struct { Title string `xml:"title"` Url string `xml:"url"`