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
tag
that holds the + element's name;
+
+ - an optional field called
attr
that 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.
+ +