diff options
author | pixel <pixel> | 2007-08-06 14:59:45 +0000 |
---|---|---|
committer | pixel <pixel> | 2007-08-06 14:59:45 +0000 |
commit | 5621123d7c16be8800e37f3abd6d28151fc386ae (patch) | |
tree | 5d4b0cc7b387a1ee663d98a84fb5f77fb88639cf | |
parent | 0b9a302e5c29cbfe56f16e91fd360a769d257a93 (diff) |
Adding "get_xml_section" function.
-rw-r--r-- | lib/xmllib.lua | 47 |
1 files changed, 46 insertions, 1 deletions
diff --git a/lib/xmllib.lua b/lib/xmllib.lua index 47eed9b..be76f5e 100644 --- a/lib/xmllib.lua +++ b/lib/xmllib.lua @@ -19,7 +19,7 @@ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ -/* $Id: xmllib.lua,v 1.16 2007-07-27 10:05:52 pixel Exp $ */ +/* $Id: xmllib.lua,v 1.17 2007-08-06 14:59:45 pixel Exp $ */ ]]-- @@ -297,6 +297,51 @@ function NewXmlMarkup() return r end +function get_xml_section(t, s, norecurs, matches) + local found, r + + function get_xml_section_r(t, s, norecurs, matches) + local k, v, found, r + for k, v in pairs(t) do + if type(v) == "table" then + if v.name == s then + if type(matches) == "table" then + local mk, mv + found = true + for mk, mv in pairs(matches) do + if not string.match(v.attr[mk], mv) then + found = false + end + end + if not found then + if not norecurs then + found, r = get_xml_section_r(v, s, norecurs, matches) + if found then + return true, r + end + end + else + return true, v + end + else + return true, v + end + else + if not norecurs then + found, r = get_xml_section_r(v, s, norecurs, matches) + if found then + return true, r + end + end + end + end + end + return false, nil + end + + found, r = get_xml_section_r(t, s, norecurs, matches) + return r +end --[[ example of use: |