B4J Question XML Parse with multiple childs

Pedro Caldeira

Active Member
Licensed User
Longtime User
Hello all,
I am trying to parse a xml file with several "child" elements
Want to get the text of the keys:
<i4>, under <value> under <product_code>
<double>, under <value> under <qnt>
<double>, under <value> under <total_price>
<string>, under <value> under <description>
<i4>, under <value> under <product_type>

Hot to do it ?

Example XML

B4X:
    <struct>
                <member>
                  <name>product_code</name>
                  <value>
                    <i4>2</i4>
                  </value>
                </member>
                <member>
                  <name>qnt</name>
                  <value>
                    <double>1</double>
                  </value>
                </member>
                <member>
                  <name>total_price</name>
                  <value>
                    <double>1</double>
                  </value>
                </member>
                <member>
                  <name>description</name>
                  <value>
                    <string>Bolo</string>
                  </value>
                </member>
                <member>
                  <name>product_type</name>
                  <value>
                    <i4>1</i4>
                  </value>
                </member>
    </struct>
 

Knoppi

Active Member
Licensed User
Longtime User
In most cases works this:
https://www.b4x.com/android/forum/t...ple-way-to-parse-xml-documents.74848/#content

B4X:
Sub Process_Globals
'    Private fx As JFX
'    Private MainForm As Form
    Private ParsedData As Map

End Sub

Sub AppStart (Form1 As Form, Args() As String)
    'MainForm = Form1
    'MainForm.RootPane.LoadLayout("Layout1") 'Load the layout file.
    'MainForm.Show
    Dim xm As Xml2Map
    xm.Initialize
    ParsedData = xm.Parse( File.ReadString( File.DirAssets, "struct.xml"))
    Dim struct As Map = ParsedData.Get("struct")
    Dim members As List = struct.Get("member")
    For Each member As Map In members
        Dim name As String = member.Get( "name")
        Dim value As Map = member.Get( "value")
        Select True
            Case value.ContainsKey( "i4")
                Dim str As String = value.Get( "i4")
            Case value.ContainsKey( "double")
                Dim str As String = value.Get( "double")
            Case value.ContainsKey( "string")
                Dim str As String = value.Get( "string")
        End Select
        Log( name &TAB& str)
    Next

End Sub
Results:
Waiting for debugger to connect...
Program started.
product_code 2
qnt 1
total_price 1
description Bolo
product_type 1
 
Last edited:
Upvote 0
Top