当前位置 : 主页 > 网页制作 > xml >

LuaXML使用多个具有相同名称的标记解析XML

来源:互联网 收集:自由互联 发布时间:2021-06-13
我正在尝试解析 XML文件中的数据 level bgdetails1/bg bgdetails2/bg/level 有了xml.find(bg)我只能得到1个细节.这是因为xml.find返回匹配搜索条件或nil的第一个(子)表. 如果我想读两个bg.我怎样才能在
我正在尝试解析 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
网友评论