2016-11-16 166 views
0

我想用Lua解析一个简单的xml文件。我应该使用什么lua xml库?我试过xml lib by Lubyk,但它对我没有用。如何在Lua中解析xml文件?

这里是我做过什么: $ sudo luarocks install xml

试图导入模块: require("xml")

结束:

error loading module 'xml.core' from file '/usr/lib/lua/5.3/xml/core.so': 
    /usr/lib/lua/5.3/xml/core.so: undefined symbol: lua_tonumber 
lua: /usr/share/lua/5.3/xml/init.lua:31: attempt to call a nil value (field 'Parser') 
stack traceback: 
    /usr/share/lua/5.3/xml/init.lua:31: in main chunk 
    [C]: in function 'require' 
    lua_doc_reader.lua:3: in main chunk 
    [C]: in ? 

那么,什么是事实上的XML在Lua读库?

+0

尝试[my lxml](http://webserver2.tecgraf.puc-rio.br/~lhf/ftp/lua/index.html#lxml),它基于expat。 – lhf

+1

我很抱歉,但在“到目前为止,向Lua添加库最简单的方法是动态加载它们。”,我停止阅读。 – minerals

+1

在我的文章中没有“动态加载”,我正在寻找一种简单的方法来读取XML。另外,你是否认真考虑过有人会编辑Makefile,然后编译lua来支持动态加载,只从你的网站安装一个库?我真的很感谢你的帮助,但这不是你使用lib库的方式。 – minerals

回答

0

好吧,试图使用各种XML库后,那个为我工作的是xmlreader

$ sudo luarocks install lua-xmlreader

然后,根据所述的XMLReader文档:

require('xmlreader') 

fhandle = io.open("temp.xml", 'r') 
data = fhandle:read("*a") 

local r = assert(xmlreader.from_string(data)) 
while (r:read()) do 
    local leadingws = (' '):rep(r:depth()) 
    if (r:node_type() == 'element') then 
    io.write(('%s%s:'):format(leadingws, r:name())) 
    while (r:move_to_next_attribute()) do 
     io.write((' %s=%q'):format(r:name(), r:value())) 
    end 
    io.write('\n') 
    end 
end 

上面的代码,打印出文档的XML结构。