我正在尝试解析 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