使用LuaXml的表条目数不正确

时间:2014-08-13 17:48:46

标签: xml-parsing lua lua-table

我正在使用LuaXml将从网络接收的xml字符串转换为Lua表但有两个问题。有人可以帮忙指出问题吗?谢谢!

1) xml.eval 返回一个包含4个条目而不是3个条目的表。我的目的是获得3个“预设”条目,但得到4个条目,最后一个条目显示“预设“。

2)我希望使用 tbl.find (“预设”)在 for 循环之前获取“预设”的3个条目并获取每个条目的属性输入,但 tbl.find (“预设”)将返回nil。

这是代码。

xml = require("LuaXml")
buff = "\
<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?> \
<presets> \
<preset name=\"preset1\" url=\"Load?name=testlist1\" id=\"1\"/> \
<preset name=\"preset2\" url=\"Load?name=testlist2\" id=\"2\"/> \
<preset name=\"preset3\" url=\"Load?name=testlist3\" id=\"3\"/> \
</presets>"

local tbl = xml.eval(buff)
for i in pairs(tbl) do
    print("name: " .. tbl[i].name .. ", id: " .. tbl[i].id .. ", url: " .. tbl[i].url)
end

1 个答案:

答案 0 :(得分:3)

一些实验性的讨论表明,LuaXml在表格中为顶级xml文档元素(在索引0)创建一个条目,然后为该元素的每个直接子标记创建一个附加元素(按顺序数字指数)。

所以你的输出表是:

> for i=0,#tbl do print(i, type(tbl[i]), tbl[i]) end
0       string  presets
1       table   <preset url="Load?name=testlist1" name="preset1" id="1" />

2       table   <preset url="Load?name=testlist2" name="preset2" id="2" />

3       table   <preset url="Load?name=testlist3" name="preset3" id="3" />

这让我觉得这是处理事情的一种非常奇怪的方式,但这似乎就是它的作用。