XML - Problems getting info from XML tree

Got a LiveCode personal license? Are you a beginner, hobbyist or educator that's new to LiveCode? This forum is the place to go for help getting started. Welcome!

Moderators: FourthWorld, heatherlaine, Klaus, kevinmiller

Post Reply
palanolho
Posts: 122
Joined: Sat Apr 27, 2013 11:40 pm

XML - Problems getting info from XML tree

Post by palanolho » Sun Jan 05, 2014 9:05 pm

Greetings everyone.

I have done this before and worked just fine BUT ... now its not working and I don't understand why ... (I'm using LC 6.5.1)

I have the following XML tree:

Code: Select all

 put revCreateXMLTree("<configs></configs>", false, true, false) into treeConfigs
     
     -- Table Skin --
     revAddXMLNode treeConfigs, "/configs", "tableskins", ""
     
     -- Table Skin -> Type = Image
     revAddXMLNode treeConfigs, "/configs/tableskins", "skintype[1]", ""
     revSetXMLAttribute treeConfigs, "/configs/tableskins/skintype[1]", "idx", "1"
     revSetXMLAttribute treeConfigs, "/configs/tableskins/skintype[1]", "name", "Image"
     
     revAddXMLNode treeConfigs, "/configs/tableskins/skintype[1]", "typeoption[1]", "imageXXX.png"
     revSetXMLAttribute treeConfigs, "/configs/tableskins/skintype[1]/typeoption[1]", "idx", "1"
     revSetXMLAttribute treeConfigs, "/configs/tableskins/skintype[1]/typeoption[1]", "name", "Bg1"
     
     revAddXMLNode treeConfigs, "/configs/tableskins/skintype[1]", "typeoption[2]", "imageXXX.png"
     revSetXMLAttribute treeConfigs, "/configs/tableskins/skintype[1]/typeoption[2]", "idx", "2"
     revSetXMLAttribute treeConfigs, "/configs/tableskins/skintype[1]/typeoption[2]", "name", "Bg2"
     
     revAddXMLNode treeConfigs, "/configs/tableskins/skintype[1]", "typeoption[3]", "imageXXX.png"
     revSetXMLAttribute treeConfigs, "/configs/tableskins/skintype[1]/typeoption[3]", "idx", "3"
     revSetXMLAttribute treeConfigs, "/configs/tableskins/skintype[1]/typeoption[3]", "name", "Bg3"
     
     -- Table Skin -> Type = Color
     revAddXMLNode treeConfigs, "/configs/tableskins", "skintype[2]", ""
     revSetXMLAttribute treeConfigs, "/configs/tableskins/skintype[2]", "idx", "2"
     revSetXMLAttribute treeConfigs, "/configs/tableskins/skintype[2]", "name", "Color"
     
     revAddXMLNode treeConfigs, "/configs/tableskins/skintype[2]", "typeoption[1]", "0,138,0"
     revSetXMLAttribute treeConfigs, "/configs/tableskins/skintype[2]/typeoption[1]", "idx", "1"
     revSetXMLAttribute treeConfigs, "/configs/tableskins/skintype[2]/typeoption[1]", "name", "Green"
     
     revAddXMLNode treeConfigs, "/configs/tableskins/skintype[2]", "typeoption[2]", "27,161,226"
     revSetXMLAttribute treeConfigs, "/configs/tableskins/skintype[2]/typeoption[2]", "idx", "2"
     revSetXMLAttribute treeConfigs, "/configs/tableskins/skintype[2]/typeoption[2]", "name", "Blue"
     
     revAddXMLNode treeConfigs, "/configs/tableskins/skintype[2]", "typeoption[3]", "162,0,37"
     revSetXMLAttribute treeConfigs, "/configs/tableskins/skintype[2]/typeoption[3]", "idx", "3"
     revSetXMLAttribute treeConfigs, "/configs/tableskins/skintype[2]/typeoption[3]", "name", "Red"

If I try to execute the following code, nothing happens....

Code: Select all

  
     -- TESTING --
     put revXMLRootNode(treeConfigs) into rootNode
     put revXMLMatchingNode(treeConfigs, rootNode, "skintype", "idx", "1", -1) into subNode
     
     answer "root = " & rootNode     -- this answers "configs" which is correct
     answer "tree = " & revXMLText(treeConfigs)     -- this returns nothing, don't understand why
     answer "subnode = " & subNode     -- this nothing returns, either
Does anyone know know why is this happening?

Many thanks in advance
- Miguel

Mark
Livecode Opensource Backer
Livecode Opensource Backer
Posts: 5150
Joined: Thu Feb 23, 2006 9:24 pm
Contact:

Re: XML - Problems getting info from XML tree

Post by Mark » Mon Jan 06, 2014 11:45 pm

Hi Miguel,

You just made a few small mistakes. Here's the correct script. I hope this produces what you expect.

Code: Select all

global gXmlTreeID

on mouseUp
   revDeleteAllXMLTrees
   put revCreateXMLTree("<configs></configs>", false, true, false) into gXmlTreeID
   
   -- Table Skin --
   revAddXMLNode gXmlTreeID, "/configs", "tableskins", ""
   
   -- Table Skin -> Type = Image
   revAddXMLNode gXmlTreeID, "/configs/tableskins", "skintype", ""
   revSetXMLAttribute gXmlTreeID, "/configs/tableskins/skintype[1]", "idx", "1"
   revSetXMLAttribute gXmlTreeID, "/configs/tableskins/skintype[1]", "name", "Image"
   
   revAddXMLNode gXmlTreeID, "/configs/tableskins/skintype[1]", "typeoption", "imageXXX.png"
   revSetXMLAttribute gXmlTreeID, "/configs/tableskins/skintype[1]/typeoption[1]", "idx", "1"
   revSetXMLAttribute gXmlTreeID, "/configs/tableskins/skintype[1]/typeoption[1]", "name", "Bg1"
   
   revAddXMLNode gXmlTreeID, "/configs/tableskins/skintype[1]", "typeoption", "imageXXX.png"
   revSetXMLAttribute gXmlTreeID, "/configs/tableskins/skintype[1]/typeoption[2]", "idx", "2"
   revSetXMLAttribute gXmlTreeID, "/configs/tableskins/skintype[1]/typeoption[2]", "name", "Bg2"
   
   revAddXMLNode gXmlTreeID, "/configs/tableskins/skintype[1]", "typeoption", "imageXXX.png"
   revSetXMLAttribute gXmlTreeID, "/configs/tableskins/skintype[1]/typeoption[3]", "idx", "3"
   revSetXMLAttribute gXmlTreeID, "/configs/tableskins/skintype[1]/typeoption[3]", "name", "Bg3"
   
   -- Table Skin -> Type = Color
   revAddXMLNode gXmlTreeID, "/configs/tableskins", "skintype", ""
   revSetXMLAttribute gXmlTreeID, "/configs/tableskins/skintype[2]", "idx", "2"
   revSetXMLAttribute gXmlTreeID, "/configs/tableskins/skintype[2]", "name", "Color"
   
   revAddXMLNode gXmlTreeID, "/configs/tableskins/skintype[2]", "typeoption", "0,138,0"
   revSetXMLAttribute gXmlTreeID, "/configs/tableskins/skintype[2]/typeoption[1]", "idx", "1"
   revSetXMLAttribute gXmlTreeID, "/configs/tableskins/skintype[2]/typeoption[1]", "name", "Green"
   
   revAddXMLNode gXmlTreeID, "/configs/tableskins/skintype[2]", "typeoption", "27,161,226"
   revSetXMLAttribute gXmlTreeID, "/configs/tableskins/skintype[2]/typeoption[2]", "idx", "2"
   revSetXMLAttribute gXmlTreeID, "/configs/tableskins/skintype[2]/typeoption[2]", "name", "Blue"
   
   revAddXMLNode gXmlTreeID, "/configs/tableskins/skintype[2]", "typeoption", "162,0,37"
   revSetXMLAttribute gXmlTreeID, "/configs/tableskins/skintype[2]/typeoption[3]", "idx", "3"
   revSetXMLAttribute gXmlTreeID, "/configs/tableskins/skintype[2]/typeoption[3]", "name", "Red"
end mouseUp
Mind the global variable and don't include the index when you create a new node.

Here are two useful scripts for testing:

Code: Select all

global gXmlTreeID

on mouseUp
   put revXmlText(gXmlTreeID,"/",true) into fld 1
end mouseUp

global gXmlTreeID

on mouseUp
   put revXMLTree(gXmlTreeID,"/",cr,space,true,999) into fld 1
end mouseUp
In the last script, I entered 999 because I'm lazy ;-) You might count the nodes or something.

Kind regards,

Mark
The biggest LiveCode group on Facebook: https://www.facebook.com/groups/livecode.developers
The book "Programming LiveCode for the Real Beginner"! Get it here! http://tinyurl.com/book-livecode

Post Reply