On 12/11/2014 8:33 AM, Procházka Lukáš Ing. - Pontex s. r. o. wrote:
Hello,
On Thu, 11 Dec 2014 02:24:24 +0100, Hans Hagen
wrote: On 12/10/2014 11:08 PM, Lukáš Procházka wrote:
I assume that you also want the content of elements, not just the attributes.
Yes...
Or how to achieve this in a best way under Ctx: XML file -> Lua table/tree?
It all depends on what kin dof table you want (if the content is an indexed table and attributes keys then you have the problem that the element cannot be a key too as it can clash) .. anyway, it's no big deal to provide a stupid table, so I can provide something because after all the loaded xml file is a table already.
It would be great.
local x = xml.load("file.xml")
local t = xml.totable(x)
where x is an index/hash mix plus _tag, _type and _namespace fields as well (after all I assume that you need to know that too).
(btw, I bet that you can do what you want with the existing functionality as well, so there is not much benefit in such a table)
Probably in the next upload,
.... Means - some functionality (for me to test or to play with) might be available tomorrow morning?
Hans
BTW, I prepared a really-simple-XML-test which shows XML -> Lua table/tree conversion, which I'd like to achieve (and which (approx.) provides LuaXml lib).
---- XML <a aaa="AAA"> <b bbb="B1"/> <b bbb="B2"> c </b> </a> ----
---- Lua representation { [0] = "a", -- Element name { [0] = "b", -- Element name -- No nested members bbb = "B1", -- Atts }, { [0] = "b", -- Element name { "c", }, -- Nested member bbb = "B2", -- Atts }, aaa = "AAA", -- Atts } ----
that already makes assumptions that it's just data ... the context xml parser is a roundtrip one so a bit more control is provided: local str = [[ <?xml version="1.0" ?> <a one="1"> <!-- rubish --> <b two="1"/> <b two="2"> c > d </b> </a> ]] I've added some flags: inspect(xml.totable(xml.convert(str))) table={ { "xml version=\"1.0\" ", ["_type"]="instruction", }, "\ ", { "\ ", { " rubish ", ["_type"]="comment", }, "\ ", { ["_tag"]="b", ["_type"]="_element", ["two"]="1", }, "\ ", { "\ c > d\ ", ["_tag"]="b", ["_type"]="_element", ["two"]="2", }, "\ ", ["_tag"]="a", ["_type"]="_element", ["one"]="1", }, ["_type"]="root", } inspect(xml.totable(xml.convert(str),true)) table={ { "xml version=\"1.0\"", ["_type"]="instruction", }, { { "rubish", ["_type"]="comment", }, { ["_tag"]="b", ["_type"]="_element", ["two"]="1", }, { "c > d", ["_tag"]="b", ["_type"]="_element", ["two"]="2", }, ["_tag"]="a", ["_type"]="_element", ["one"]="1", }, ["_type"]="root", } inspect(xml.totable(xml.convert(str),true,true)) table={ { [0]="a", { [0]="b", ["two"]="1", }, { [0]="b", "c > d", ["two"]="2", }, ["one"]="1", }, } The last one is yours. Of course in all cases you loose info that is present in the original representation (where you can also access the nodes via expressions). Don't expect additional helpers for this 'totable' variant. Hans ----------------------------------------------------------------- Hans Hagen | PRAGMA ADE Ridderstraat 27 | 8061 GH Hasselt | The Netherlands tel: 038 477 53 69 | voip: 087 875 68 74 | www.pragma-ade.com | www.pragma-pod.nl -----------------------------------------------------------------