Parsing XML error

Just got started with eggplant and i want to parse some XML. I have been able to parse simpler XML using the senseTalk xmlParserScript.

I am trying a different method this time and the script works, but only for the first set of child nodes.

my XML looks like this:

<dataSet>
<item>
<toolImage>tnclTool_pointer</toolImage>
<toolImage>tnclTool_eliminate</toolImage>
<toolImage>tnclTool_highlighter</toolImage>
<toolImage>tnclTool_pencil</toolImage>
<toolImage>tnclTool_eraser</toolImage>
<toolImage>tnclTool_notepad</toolImage>
<toolImage>tnclTool_ruler</toolImage>
<toolImage>tnclTool_protractor</toolImage>
<toolImage>tnclTool_dot</toolImage>
<toolImage>tnclTool_line</toolImage>
<toolImage>tnclTool_compass</toolImage>
<toolImage>tnclTool_pTable</toolImage>
<toolImage>tnclTool_magnifier</toolImage>
</item>
<item>
<toolImage>tnclTool_pointer</toolImage>
<toolImage>tnclTool_eliminate</toolImage>
<toolImage>tnclTool_highlighter</toolImage>
<toolImage>tnclTool_pencil</toolImage>
<toolImage>tnclTool_eraser</toolImage>
<toolImage>tnclTool_notepad</toolImage>
<toolImage>tnclTool_ruler</toolImage>
<toolImage>tnclTool_protractor</toolImage>
<toolImage>tnclTool_dot</toolImage>
<toolImage>tnclTool_line</toolImage>
<toolImage>tnclTool_compass</toolImage>
</item>
</dataSet>

my script:
put file "C:\path_to_the_data_file\data.xml" as a tree into XMLSource
set dataSet to XMLSource

put node "tnLink" of dataSet into tnLinkNode
put tnLinkNode's _attributes.path into testNavLink


put dataSet's _children into itemList

repeat with each item in itemList
	set itemNode to node item of itemList as tree
	put itemNode's _attributes.uin into itemUIN	
	put itemNode's _children into toolList
	
	repeat with each toolImage in toolList
		put the text of toolImage into toolName
		put "toolName:" & toolName
	end repeat
	put
end repeat

so it runs perfect for the first item
prints out the toolName's as expected but then...

the error message:
24-May-12 12:42:35 FAILURE NSInternalInconsistencyException NSXMLElement.m:432 Assertion failed in NSXMLElement(instance), method insertChild:atIndex:. NSInvalidArgumentException\nExecution Time 0:00:00 testNavToolsTest.script

seems to fail the second time this runs:
set itemNode to node item of itemList as tree

Im sure this is a total noob question. I hope someone can help!

thanks

Comments

  • all i wanna do is create a variable that houses that node and all its children in XML so i can continue to parse it.

    i know
    set itemNode to node item of itemList as tree
    
    is wrong.. I have tried a few other ways but they all seem to cause the same error, or not print out any XML at all :(
  • I changed this
    set itemNode to node item of itemList as tree
    

    to this
    put item of itemList as tree into itemNode
    

    put "itemNode:" & itemNode

    now it prints an empty value
  • Ok, first thing, remove your "put" at the bottom of your code...

    Second, I think, actually pretty sure, even though it looks the same, your XML is formatted wrong. To correct that all I did was build the xml file from eggplant.
    set XMLSource to {{
    <dataSet>
    <item>
    <toolImage>tnclTool_pointer</toolImage>
    <toolImage>tnclTool_eliminate</toolImage>
    <toolImage>tnclTool_highlighter</toolImage>
    <toolImage>tnclTool_pencil</toolImage>
    <toolImage>tnclTool_eraser</toolImage>
    <toolImage>tnclTool_notepad</toolImage>
    <toolImage>tnclTool_ruler</toolImage>
    <toolImage>tnclTool_protractor</toolImage>
    <toolImage>tnclTool_dot</toolImage>
    <toolImage>tnclTool_line</toolImage>
    <toolImage>tnclTool_compass</toolImage>
    <toolImage>tnclTool_pTable</toolImage>
    <toolImage>tnclTool_magnifier</toolImage>
    </item>
    <item>
    <toolImage>tnclTool_pointer</toolImage>
    <toolImage>tnclTool_eliminate</toolImage>
    <toolImage>tnclTool_highlighter</toolImage>
    <toolImage>tnclTool_pencil</toolImage>
    <toolImage>tnclTool_eraser</toolImage>
    <toolImage>tnclTool_notepad</toolImage>
    <toolImage>tnclTool_ruler</toolImage>
    <toolImage>tnclTool_protractor</toolImage>
    <toolImage>tnclTool_dot</toolImage>
    <toolImage>tnclTool_line</toolImage>
    <toolImage>tnclTool_compass</toolImage>
    </item>
    </dataSet>
    }}

    set order to XMLSource as tree

    put XMLSource into file "/users/temp/blah2.xml"

    then I directed your code "minus your put at the end" to blah2.xml and it returned this...
    toolName:tnclTool_pointer
    toolName:tnclTool_eliminate
    toolName:tnclTool_highlighter
    toolName:tnclTool_pencil
    toolName:tnclTool_eraser
    toolName:tnclTool_notepad
    toolName:tnclTool_ruler
    toolName:tnclTool_protractor
    toolName:tnclTool_dot
    toolName:tnclTool_line
    toolName:tnclTool_compass
    toolName:tnclTool_pTable
    toolName:tnclTool_magnifier
    toolName:tnclTool_pointer
    toolName:tnclTool_eliminate
    toolName:tnclTool_highlighter
    toolName:tnclTool_pencil
    toolName:tnclTool_eraser
    toolName:tnclTool_notepad
    toolName:tnclTool_ruler
    toolName:tnclTool_protractor
    toolName:tnclTool_dot
    toolName:tnclTool_line
    toolName:tnclTool_compass
    toolName:tnclTool_pTable
    toolName:tnclTool_magnifier
    

    I dunno if that's what you wanted...but it's more than just 1 result and no errors.
  • hmm i just did exactly what you said and im still getting the same error..could you post the suite that you edited to work so i can dig into it.
  • also..the reason why the XML was an external file is, i will be running this multiple times with different data.
    i dont want to have to edit the eggplant code every time i want to update a tool :)
  • EggplantMattEggplantMatt ForumAdmin admin
    Are you running v11.3 of eggPlant? I've been running your code with your XML (both the version in your suite and the slightly different version in your post) and it's been working consistently for me.
  • So i downloaded and installed the latest version and now the script does less

    i have no idea why i am getting a different experience than you.

    i am running the 11.3 Windows version.

    thanks for helping!
  • EggplantMattEggplantMatt ForumAdmin admin
    Try changing the first line of your repeat loop from:
    set itemNode to node item of itemList as tree
    
    to
    set itemNode to it as tree
    
    That works consistently for me on eggPlant for Windows.
  • still no workie for me.

    now when this runs > put "itemNode:" & itemNode

    I get this in the output:

    itemNode:IT
    itemNode:IT
    itemNode:IT

    any chance you could post the working suite here and let me try it?

    thanks,
  • EggplantMattEggplantMatt ForumAdmin admin
    I think maybe you changed something else prior to my suggestion. This code definitely works and consistently produces the correct output:
    put file "C:\path_to_the_data_file\data.xml" as a tree into XMLSource
    set dataSet to XMLSource
    
    put node "tnLink" of dataSet into tnLinkNode
    put tnLinkNode's _attributes.path into testNavLink
    
    
    put dataSet's _children into itemList
    
    repeat with each item in itemList
       set itemNode to it as tree
       put itemNode's _attributes.uin into itemUIN   
       put itemNode's _children into toolList
       
       repeat with each toolImage in toolList
          put the text of toolImage into toolName
          put "toolName:" & toolName
       end repeat
       put
    end repeat
    
  • not sure why but i started again and this time was able to get it to work using your line of code!!

    thanks very much!!!!
    :D :D
Sign In or Register to comment.