http://gambaswiki.org/bugtracker/edit?object=BUG.1106&from=L21haW4-
Daniel BLANCH BATALLER reported a new bug. Summary ------- XmlElement.GetChildrenByTagName does get parent too if tag is the same Type : Bug Priority : Medium Gambas version : 3.7 Product : XML components Description ----------- http://gambaswiki.org/wiki/comp/gb.xml/xmlelement/getchildrenbytagname As the documentation states, this should get the children, but if parent shares the same tag name as children, parent is included in position [0] of the returned XmlElement[] array. XmlElement.GetChildrenByTagName (gb.xml) Function GetChildrenByTagName ( TagName As String [ , Mode As Integer, Depth As Integer ] ) As XmlElement[] Returns all the **child elements** whose tag name matches Name. The Mode argument defines the comparison method used. It supports GB.Binary, GB.IgnoreCase and GB.Like. See Predefined Constants for further information. The Depth argument defines where to stop the search : a negative value will stop only at the end of the tree (default), 1 will check only the current element, 2 will check **only the direct children** of the element, and so on ... Here is some sample code to reproduce the issue. Thank you in advance Daniel. '''' ' Unit test inhouse module ' TODO: Find unit test library '''' Private errors As Integer = 0 ' Fixture, add tests here Public Sub Main() xmlTest() End ' Unit test Sub xmlTest() Dim children_level_0 As XmlElement[] Dim children_level_1 As XmlElement[] Dim document As XmlDocument = New XmlDocument document.FromString( "<root>" & " <child>" & " <child>" & " </child>" & " <child/>" & " </child>" & "</root>") children_level_0 = document.Root.GetChildrenByTagName("child", GB.Binary, 2) '2 direct children equals(children_level_0.Length, 1, "one child expected") children_level_1 = children_level_0[0].GetChildrenByTagName("child", GB.Binary, 2) equals(children_level_1.Length, 2, "two child expected") 'it returns three instead, first element is parent node endTests() End Sub equals(actual As Integer, expected As Integer, msg As String) If actual = expected Then Print "ok : " & msg Else errors = errors + 1 Print "error : " & msg & " [expected =" & expected & ", actual = " & actual & "]" Endif End Sub endTests() If errors > 0 Then Print "Result: Failed [" & errors & "] tests" Else Print "Result: All tests OK" Endif End ------------------------------------------------------------------------------ Check out the vibrant tech community on one of the world's most engaging tech sites, Slashdot.org! http://sdm.link/slashdot _______________________________________________ Gambas-user mailing list Gambas-user@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/gambas-user