]> git.sesse.net Git - vlc/commitdiff
Fix simplexml (still has issues with <bla/> tags)
authorAntoine Cellerier <dionoea@videolan.org>
Sun, 14 Feb 2010 22:30:31 +0000 (23:30 +0100)
committerAntoine Cellerier <dionoea@videolan.org>
Sun, 14 Feb 2010 22:30:55 +0000 (23:30 +0100)
share/lua/intf/modules/common.lua
share/lua/modules/simplexml.lua

index c02d4e7e73e8fac0887f6a5991fed1bb6c5e2108..1215ab85b660af6778718769de7ade44b3836ecd 100644 (file)
@@ -54,6 +54,10 @@ end
 -- print a table (recursively)
 function table_print(t,prefix)
     local prefix = prefix or ""
+    if not t then
+        print(prefix.."/!\\ nil")
+        return
+    end
     for a,b in pairs_sorted(t) do
         print(prefix..tostring(a),b)
         if type(b)==type({}) then
index 13d9a0bc83096b6ef6ef7804292227e5bb22fbeb..e2f6b1f07a8e24089ab6c5552ef2adb4bf91bcf9 100644 (file)
@@ -37,25 +37,32 @@ local function parsexml(stream)
     local parents = {}
     while reader:read() > 0 do
         local nodetype = reader:node_type()
+        --print(nodetype, reader:name())
         if nodetype == 'startelem' then
             local name = reader:name()
-            local node = { name: '', attributes: {}, children: {} }
+            local node = { name= '', attributes= {}, children= {} }
             node.name = name
-            while reader:NextAttr() == 0 do
-                node.attributes[reader:Name()] = reader:Value()
+            while reader:next_attr() == 0 do
+                node.attributes[reader:name()] = reader:value()
             end
             if tree then
-                tree.children[#tree.children] = node
-                parents[#parents] = tree
-                tree = node
+                table.insert(tree.children, node)
+                table.insert(parents, tree)
             end
+            tree = node
         elseif nodetype == 'endelem' then
-            tree = parents[#parents-1]
+            if #parents > 0 then
+                tree = parents[#parents]
+                table.remove(parents)
+            end
         elseif nodetype == 'text' then
-            node.children[#node.children] = reader:Value()
+            table.insert(tree.children, reader:value())
         end
     end
 
+    if #parents > 0 then
+        error("XML parser error/Missing closing tags")
+    end
     return tree
 end