LuaXML解析与同名
多个标签的XML我试图解析XML文件中的数据,如LuaXML解析与同名
<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读出水平。但是我的尝试失败了。你能帮我看看这段代码吗?
我最终得到这样的解决方案,基于迈克考可兰的建议。
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
在调用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
非常感谢你!这是一个很棒的luaxml对象教程。但迈克·科克伦真的解决了我的问题。我应该打开一个新的帖子,询问luaxml对象的解释吗?我认为其他人搜索会更容易。 – Decula
哪里可以找到节点数据类型doc?我在LuaXML网站找不到它。 – Decula
@Decula'node'不是来自luaxml的数据类型。它只是一个在循环示例中使用的变量,所以它可以在循环内引用。你可以把它命名为“children”,“value”或其他东西。 – greatwolf
@greatwolf谢谢你的通知。我的意思是我想知道luaxml对象的数据类型.....有object.TAG。我想知道我可以使用哪些额外属性 – Decula