gpt4 book ai didi

xml - LuaXML 解析具有多个同名标签的 XML

转载 作者:数据小太阳 更新时间:2023-10-29 02:05:07 26 4
gpt4 key购买 nike

我正在尝试从 XML 文件中解析数据,例如

<level>
<bg>details1</bg>
<bg>details2</bg>
</level>

xml.find(bg)我只能得到细节 1。这是因为 xml.find 返回符合搜索条件的第一个(子)表或 nil。

如果我想把两个背景都读出来。我怎样才能在 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

层数太多,看起来很慢。。有什么提高效率的建议吗?

最佳答案

在调用 xml.load 之后,您会得到一个表示刚刚加载的 xml 文件的表。您可以通过访问表中相应的数字索引来访问特定节点:

require 'luaxml'

local level = xml.load('level.xml')

-- level[1] == <bg>details1</bg>
-- level[2] == <bg>details2</bg>
for i = 1, #level do
print(level[i])
end

编辑:根据您编辑的问题,这是从 xml 文件中提取数据的一种方法:

require 'luaxml'

local xmlroot = xml.load('your.xml')
local b = xmlroot:find 'b'

for level = 1, #b do
print(b[level][1][1])
end

如果您可以控制 xml 格式,您可以稍微修改它以使解析更具可读性:

<a>
<b>
<level bg="details1"> </level>
<level bg="details2"> </level>
</b>
</a>

通过此更改,bg 成为level 节点的属性。这减少了一个间接级别。要访问 bg 属性,只需使用 lua . 运算符并将 bg 作为键。然后可以将解析循环修改为:

for level = 1, #b do
print(b[level].bg)
end

关于xml - LuaXML 解析具有多个同名标签的 XML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17707777/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com