]> git.sesse.net Git - vlc/commitdiff
This should fix <tag/> cases.
authorAntoine Cellerier <dionoea@videolan.org>
Sun, 14 Feb 2010 23:31:29 +0000 (00:31 +0100)
committerAntoine Cellerier <dionoea@videolan.org>
Sun, 14 Feb 2010 23:40:26 +0000 (00:40 +0100)
share/lua/modules/simplexml.lua

index e2f6b1f07a8e24089ab6c5552ef2adb4bf91bcf9..5d0d60f5bd979cc99514e564a09d1ea590fbd3d0 100644 (file)
@@ -52,6 +52,26 @@ local function parsexml(stream)
             tree = node
         elseif nodetype == 'endelem' then
             if #parents > 0 then
+                local name = reader:name()
+                local tmp = {}
+                --print(name, tree.name, #parents)
+                while name ~= tree.name do
+                    if #parents == 0 then
+                        error("XML parser error/faulty logic")
+                    end
+                    local child = tree
+                    tree = parents[#parents]
+                    table.remove(parents)
+                    table.remove(tree.children)
+                    table.insert(tmp, 1, child)
+                    for i, node in pairs(child.children) do
+                        table.insert(tmp, i+1, node)
+                    end
+                    child.children = {}
+                end
+                for _, node in pairs(tmp) do
+                    table.insert(tree.children, node)
+                end
                 tree = parents[#parents]
                 table.remove(parents)
             end