Introduction
Lua Object Model (LOM) is a representation of XML elements through Lua data types. Currently it is not supposed to be 100% complete, but simple.
LuaExpat's distribution provides an implementation of LOM that gets an XML documenta (a string) and transforms it to a Lua table. The only function exported is lxp.lom.parse.
Characteristics
The model represents each XML element as a Lua table. A LOM table has three special characteristics:
- a special field called
tagthat holds the element's name; - an optional field called
attrthat stores the element's attributes (see attribute's section); and - the element's children are stored at the array-part of the table. A child could be an ordinary string or another XML element that will be represented by a Lua table following these same rules.
Attributes
The special field attr is a Lua table that stores the XML element's attributes as pairs <key>=<value>. To assure an order (if necessary), the sequence of keys could be placed at the array-part of this same table.
Examples
For a simple string like
s = [[<abc a1="A1" a2="A2">inside tag `abc'</abc>]]
A call like
tab = lxp.lom.parse (s))
Would result in a table equivalent to
tab = {
["attr"] = {
[1] = "a1",
[2] = "a2",
["a2"] = "A2",
["a1"] = "A1",
},
[1] = "inside tag `abc'",
["tag"] = "abc",
}
Now an example with an element nested inside another element
tab = lxp.lom.parse( [[<qwerty q1="q1" q2="q2"> <asdf>some text</asdf> </qwerty>]] )
The result would have been a table equivalent to
tab = {
[1] = "\
",
[2] = {
["attr"] = {
},
[1] = "some text",
["tag"] = "asdf",
},
["attr"] = {
[1] = "q1",
[2] = "q2",
["q2"] = "q2",
["q1"] = "q1",
},
[3] = "\
",
["tag"] = "qwerty",
}
Note that even the new-line and tab characters are stored on the table.
