我正在尝试解析
XML文件中的数据
<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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。