Skip to content

manoelcampos/xml2lua

master
Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Code

Latest commit

* correctly set a ROOT node as the first node of the dom object.
set the DECL node as the first child node of ROOT.
fix indent in dom:toXml().

* fix detection of an empty ELEMENT node.

* XmlParser: fix parsing of a DTD element.
dom handler: fix handling a DTD element.

* Fix dom.lua docs

* Rename people.xml to people1.xml
Moves complex tags (DOCTYPE and CDATA)
to people2.xml to make people1 a basic XML.

* Restructure example5.lua to
parse the XML files whose names
are defined by an array inside the example,
instead of receiving them in the STDIN.

This way, the entry to run this example
inside the Makefile were removed.
Running a specific example inside the Makefile
is too specific.

If that was for test purposes, they should be inside the test files.

---------

Signed-off-by: Manoel Campos <manoelcampos@gmail.com>
Co-authored-by: Sudheer Hebbale <sudheer.hr@tekenlight.com>
Co-authored-by: Manoel Campos <manoelcampos@gmail.com>
7e36b2e

Git stats

Files

Permalink
Failed to load latest commit information.
Type
Name
Latest commit message
Commit time
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

xml2lua Build Status MIT license LuaRocks

Buy Me A Coffee

conversion ways

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.

1. Installation

1.1. From LuaRocks repository

The best way to download the module is using LuaRocks at the command line:

luarocks install xml2lua

1.2. From local sources

Download the source files using the download button above or type at a terminal:

git clone https://github.com/manoelcampos/xml2lua.git

Finally, enter the directory where the source files were downloaded and type:

luarocks make

2. How to use

2.1. Parsing an XML String into a Lua Table

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

2.2. Converting a Lua Table to an XML String

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"))

3. Command line tool

You can use a command line tool to try parsing XML files. Execute lua testxml.lua -help on the terminal for more details.

4. Running tests

4.1. Requirements

4.2. How to

make lint # to run the lint check
make test # to run the acceptance tests

5. License

This code is freely distributable under the terms of the MIT license.

6. Authors