Android Question XOM-Parser GetChildElementsByName returns uninitialized object

ostau

Member
Licensed User
Longtime User
I'm wondring, if all my elements, which are called with a ... ByName-Method are empty?
B4X:
Sub XOMBuilder3_BuildDone(XOMDocument1 As XOMDocument, Tag As Object)
   Dim RootElement As XOMElement
   Dim xmlTables As XOMElements
   If XOMDocument1.IsInitialized Then
      RootElement=XOMDocument1.RootElement
      xmlTables = RootElement.GetChildElementsByName("tables")
      For i1 = 0 To xmlTables.Size - 1
         Log(i1)
      Next
   End If
End Sub


I'm definitly sure, there are ChildElements with the given Name (see attached file).
If i call the elements by the GetChildElements-Method, I can iterate through the elements and they have the Name.
Any idea what's wrong with my calls?
 

Attachments

  • getBenutzerShort.xml
    104.8 KB · Views: 292

sorex

Expert
Licensed User
Longtime User
the problem is the added rubbish.

use something like this to filter it out if you don't have access to the actual xml generating script.

B4X:
xml=File.ReadString(File.DirAssets,"getBenutzerShort.xml")
xml=xml.Replace("xmlns:xs","x")
xml=xml.Replace("xsi:","x")
xml=xml.Replace("xmlns","x")
 
Upvote 0

sorex

Expert
Licensed User
Longtime User
ok, I arrived at my laptop and had a closer look at it. this seems to work

B4X:
Sub Activity_Create(FirstTime As Boolean)
Dim xml As String
xml=File.ReadString(File.DirAssets,"getBenutzerShort.xml")
xml=xml.Replace("xmlns:xs","x")
xml=xml.Replace("xsi:","x")
xml=xml.Replace("xmlns","x")

Dim XOMBuilder1 As XOMBuilder
XOMBuilder1.Initialize("XOMBuilder1")
XOMBuilder1.BuildFromString(xml, "", Null)
End Sub

Sub XOMBuilder1_BuildDone(XOMDocument1 As XOMDocument, Tag As Object)
   Dim RootElement As XOMElement
   Dim xmlTables As XOMElements
   If XOMDocument1.IsInitialized Then
      RootElement=XOMDocument1.RootElement
      xmlTables = RootElement.GetChildElementsByName("tables")
      For i1 = 0 To xmlTables.Size - 1
          Dim data As XOMElements
        data=xmlTables.GetElement(i1).GetChildElements
        Log(data.GetElement(i1))
        For x=0 To data.Size-1
            Dim data2 As XOMElements data2=data.GetElement(x).GetChildElements
            Log(data2.GetElement(x))
            Dim v As XOMElement
            v=data2.GetElement(x)
            Log(v.Value)
            Next
      Next
   End If
End Sub

and outputs

** Activity (main) Create, isFirst = true **
** Activity (main) Resume **
(Element) [nu.xom.Element: cTable]
(Element) [nu.xom.Element: tableName]
BenutzerShort
 
Upvote 0

sorex

Expert
Licensed User
Longtime User
the more optimized method is this tho

B4X:
      RootElement=XOMDocument1.RootElement
      xmlTables = RootElement.GetChildElementsByName("tables").GetElement(0).GetChildElementsByName("cTable")
      For x=0 To xmlTables.Size-1
            Log ( xmlTables.GetElement(x).GetChildElementsByName("tableName").GetElement(0).Value )
            Log ( xmlTables.GetElement(x).GetChildElementsByName("runStart").GetElement(0).Value )
      Next

** Activity (main) Create, isFirst = true **
** Activity (main) Resume **
BenutzerShort
2016-02-04T09:26:19.5405748+01:00
 
Last edited:
Upvote 0
Top