我正在尝试解析 XML文件中的数据 level bgdetails1/bg bgdetails2/bg/level 有了xml.find(bg)我只能得到1个细节.这是因为xml.find返回匹配搜索条件或nil的第一个(子)表. 如果我想读两个bg.我怎样才能在
<level> <bg>details1</bg> <bg>details2</bg> </level>
有了xml.find(bg)我只能得到1个细节.这是因为xml.find返回匹配搜索条件或nil的第一个(子)表.
如果我想读两个bg.我怎样才能在LuaXML中实现它?或者请介绍其他Lua XML库的工作原理.
插件
我的真实场景是这样的
<a>
<b>
<level>
<bg>details1</bg>
</level>
<level>
<bg>details2</bg>
</level>
</b>
</a>
我知道我需要将整个b对象取出并使用xml.tag来读取级别.但我的尝试失败了.你能帮我解决一下这段代码吗?
根据Mike Corcoran的建议,我终于得到了这样的解决方案.
require 'luaxml'
local text = [[
<a>
<bcde>
<level>
<bg>details1</bg>
</level>
<level>
<bg>details2</bg>
</level>
</bcde>
</a>
]]
local txml = xml.eval(text)
for _, node in pairs(txml:find("bcde")) do
if node.TAG ~= nil then
if node[node.TAG] == "level" then
local bg = node:find("bg")
if bg ~= nil then
for i=1, #bg do
print( bg[i])
end
end
end
end
end
有太多的层次,似乎很慢..任何提高效率的建议?
只需迭代级别标记的所有子级(除非那里有其他信息,您没有告诉我们需要过滤的内容)require 'luaxml'
local text = [[
<level>
<bg>details1</bg>
<bg>details2</bg>
</level>
]]
local VALUE = 1
local txml = xml.eval(text)
for _, node in pairs(txml:find("level")) do
if node.TAG ~= nil then
print(node[VALUE])
end
end
如果您需要过滤除< bg>之外的所有内容标签,你可以稍微修改一下这个循环:
for _, node in pairs(txml:find("level")) do
if node.TAG ~= nil then
if node[node.TAG] == "bg" then
print(node[VALUE])
end
end
end
