xml2lua is an XML parser written entirely in Lua which doesn’t depend on any external C/C++ library. It works for Lua 5.1 to 5.3 and enables:
-
parsing an XML string into a Lua Table;
-
converting a Lua Table to an XML string.
This version was adapted to work with Lua 5 and can be used in Lua applications, including interactive Digital Television (DTV) Ginga NCL applications for the Brazilian DTV System (worldwide known as ISDB-T International or ISDB-Tb).
The original parser was written by Paul Chakravarti and is available on LuaUsers.
The best way to download the module is using LuaRocks at the command line:
luarocks install xml2lua
A simplified example which parses an XML directly from a string is presented below. There are some caveats to deal with when an XML has just one tag. Check the example1.lua for details.
local xml2lua = require("xml2lua") --Uses a handler that converts the XML to a Lua table local handler = require("xmlhandler.tree") local xml = [[ <people> <person type="natural"> <name>Manoel</name> <city>Palmas-TO</city> </person> <person type="legal"> <name>University of Brasília</name> <city>Brasília-DF</city> </person> </people> ]] --Instantiates the XML parser local parser = xml2lua.parser(handler) parser:parse(xml) --Manually prints the table (since the XML structure for this example is previously known) for i, p in pairs(handler.root.people.person) do print(i, "Name:", p.name, "City:", p.city, "Type:", p._attr.type) end
local xml2lua = require("xml2lua") local people = { person = { {name="Manoel", city="Palmas-TO", _attr={ type='natural' } }, {name="Breno", city="Palmas-TO", _attr={ type='legal' } } } } print("People Table\n") xml2lua.printable(people) print() print("XML Representation\n") print(xml2lua.toXml(people, "people"))
You can use a command line tool to try parsing XML files.
Execute lua testxml.lua -help
on the terminal for more details.
You must have installed docker and docker compose.
This code is freely distributable under the terms of the MIT license.
-
Manoel Campos da Silva Filho http://about.me/manoelcampos
-
Paul Chakravarti paulc@passtheaardvark.com