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.
