使用LuaXml的表项数量不正确



我使用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

一点实验表明,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" />

我觉得这是一种非常奇怪的处理方式,但它似乎就是这样做的。

最新更新