【问题标题】:incorrect number of table entries using LuaXml使用 LuaXml 的表条目数不正确
【发布时间】:2014-08-14 03:17:06
【问题描述】:

我正在使用 LuaXml 将从网络接收到的 xml 字符串转换为 Lua 表,但遇到了两个问题。任何人都可以帮助指出问题吗?谢谢!

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

2) 我希望在 for 循环之前使用 tbl.find("preset") 获取“preset”的 3 个条目并获取每个条目的属性条目,但 tbl.find("preset") 将返回 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 是否需要对这些引号进行转义,或者 lua 因为您使用双引号来括住字符串?如果您使用单引号或 lua 长字符串 ([[...]]) 语法引用字符串,我想您不需要转义这些引号。
  • 你的代码的输出是什么?
  • @Etan 双引号问题解决了。谢谢。
  • 而且,如果你使用for k, v in pairs(tbl) do,你可以printf("name: %s, id: %s, url: %s", v.name, v.id, v.url)(prtinf定义为:function printf(s, ...) return s:format(...) end
  • @Advert 感谢您的评论,我不明白 pairs 功能。目标是检索每个预设条目并将属性放入 Lua 表中。上面的代码只是打印。但我不知道为什么 xml.eval 返回 4 个条目

标签: xml-parsing lua lua-table


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-08-11
    • 1970-01-01
    • 2021-07-29
    • 1970-01-01
    • 2021-07-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多