[Gambas-user] [Gambas Bug Tracker] Bug #1106: XmlElement.GetChildrenByTagName does get parent too if tag is the same

bugtracker at ...3416... bugtracker at ...3416...
Wed May 24 12:47:32 CEST 2017


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








More information about the User mailing list