[Done] 6.30 b6 - XMLNodePath error in return string
Posted: Tue Dec 30, 2025 12:41 pm
The length of the string returned by the XMLNodePath function is displayed after “Path Len:”, but it outputs strange values like 64, 63, and 68.
It seems the return string of the XMLNodePath function is corrupted.
The issue occurs in both the C and Asm backends of PB 6.30 b6. (x86/x64)
It seems the return string of the XMLNodePath function is corrupted.
The issue occurs in both the C and Asm backends of PB 6.30 b6. (x86/x64)
Code: Select all
;
; ------------------------------------------------------------
;
; PureBasic - Xml
;
; (c) Fantaisie Software
;
; ------------------------------------------------------------
;
#Window = 0
#TreeGadget = 0
#XML = 0
; This procedure fills our TreeGadget, by adding the current node
; and then exploring all childnodes by recursively calling itself.
;
Procedure FillTree(*CurrentNode, CurrentSublevel)
; Ignore anything except normal nodes. See the manual for
; XMLNodeType() for an explanation of the other node types.
;
If XMLNodeType(*CurrentNode) = #PB_XML_Normal
; Add this node to the tree. Add name and attributes
;
Text$ = GetXMLNodeName(*CurrentNode) + ": " + XMLNodePath(*CurrentNode) + " - Path Len: " + Len(XMLNodePath(*CurrentNode))
Debug Text$
If ExamineXMLAttributes(*CurrentNode)
While NextXMLAttribute(*CurrentNode)
Text$ + " Attribute:" + XMLAttributeName(*CurrentNode) + "=" + Chr(34) + XMLAttributeValue(*CurrentNode) + Chr(34) + " "
Wend
EndIf
Text$+ " " + GetXMLNodeText(*CurrentNode)
AddGadgetItem(#TreeGadget, -1, Text$, 0, CurrentSublevel)
; Now get the first child node (if any)
;
*ChildNode = ChildXMLNode(*CurrentNode)
; Loop through all available child nodes and call this procedure again
;
While *ChildNode <> 0
FillTree(*ChildNode, CurrentSublevel + 1)
*ChildNode = NextXMLNode(*ChildNode)
Wend
EndIf
EndProcedure
Define tempXml.s
tempXml = ~"<Main>" +
~" <t1>" +
~" <element>a1</element>" +
~" <element>a2</element>" +
~" <element>a3</element>" +
~" </t1>" +
~" <t2>" +
~" <t21>" +
~" <element>b1</element>" +
~" <element>b2</element>" +
~" <element>b3</element>" +
~" <element>b4</element>" +
~" <element>b5</element>" +
~" <element>b6</element>" +
~" <element>b7</element>" +
~" <element>b8</element>" +
~" <element>b9</element>" +
~" <element>b10</element>" +
~" <element>b11</element>" +
~" <element>b12</element>" +
~" </t21>" +
~" </t2>" +
~" <t3>" +
~" <element>c1</element>" +
~" <element>c2</element>" +
~" <element>c3</element>" +
~" <element>c4</element>" +
~" <element>c5</element>" +
~" <element>c6</element>" +
~" <element>c7</element>" +
~" </t3>" +
~"</Main>"
If ParseXML(#XML, tempXml) And XMLStatus(#XML) = #PB_XML_Success
If OpenWindow(#Window, 0, 0, 500, 500, "XML Example", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
TreeGadget(#TreeGadget, 10, 10, 480, 480)
; Get the main XML node, and call the FillTree() procedure with it
;
*MainNode = MainXMLNode(#XML)
If *MainNode
FillTree(*MainNode, 0)
EndIf
; Expand all nodes for a nicer view
;
For i = 0 To CountGadgetItems(#TreeGadget) - 1
SetGadgetItemState(#TreeGadget, i, #PB_Tree_Expanded)
Next i
; Wait for the window close event.
;
Repeat
Event = WaitWindowEvent()
Until Event = #PB_Event_CloseWindow
EndIf
EndIf
Main: /Main - Path Len: 5
t1: /Main/t1 - Path Len: 8
element: /Main/t1/element - Path Len: 16
element: /Main/t1/element[2] - Path Len: 19
element: /Main/t1/element[3] - Path Len: 19
t2: /Main/t2 - Path Len: 8
t21: /Main/t2/t21 - Path Len: 12
element: /Main/t2/t21/element - Path Len: 20
element: /Main/t2/t21/element[2] - Path Len: 64 <---
element: /Main/t2/t21/element[3] - Path Len: 64 <---
element: /Main/t2/t21/element[4] - Path Len: 64 <---
element: /Main/t2/t21/element[5] - Path Len: 64 <---
element: /Main/t2/t21/element[6] - Path Len: 64 <---
element: /Main/t2/t21/element[7] - Path Len: 64 <---
element: /Main/t2/t21/element[8] - Path Len: 64 <---
element: /Main/t2/t21/element[9] - Path Len: 64 <---
element: /Main/t2/t21/element[10] - Path Len: 63 <---
element: /Main/t2/t21/element[11] - Path Len: 63 <---
element: /Main/t2/t21/element[12] - Path Len: 63 <---
t3: /Main/t3 - Path Len: 8
element: /Main/t3/element - Path Len: 16
element: /Main/t3/element[2] - Path Len: 68 <---
element: /Main/t3/element[3] - Path Len: 68 <---
element: /Main/t3/element[4] - Path Len: 68 <---
element: /Main/t3/element[5] - Path Len: 68 <---
element: /Main/t3/element[6] - Path Len: 68 <---
element: /Main/t3/element[7] - Path Len: 68 <---