2016-11-16 6 views
0

Es gibt eine einfache XML-Datei, die ich mit Lua analysieren möchte. Welche Lua XML-Bibliothek sollte ich verwenden? Ich versuchte xml lib by Lubyk, aber es funktionierte nicht für mich. HierWie XML-Datei in Lua zu analysieren?

ist das, was ich getan habe: $ sudo luarocks install xml

das Modul zu importieren Versuchte: require("xml")

endete mit:

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 ? 

Also, was ist die xml defacto Bibliothek zum Lesen in Lua ?

+0

Versuchen Sie [meine lxml] (http://webserver2.tecgraf.puc-rio.br/~lhf/ftp/lua/index.html#lxml), die auf Expat basiert. – lhf

+1

Es tut mir leid, aber nach "Bei weitem ist der einfachste Weg, um Bibliotheken zu Lua hinzuzufügen, sie dynamisch zu laden.", Hörte ich auf zu lesen. – minerals

+1

Es gibt kein "dynamisches Laden" in meinem Beitrag, ich suche nach einem einfachen Weg, XML zu lesen. Glauben Sie ernsthaft, dass jemand das Makefile bearbeiten und dann lua kompilieren wird, um dynamisches Laden zu unterstützen, nur um eine der Bibliotheken von Ihrer Website zu installieren? Ich schätze deine Hilfe sehr, aber das ist nicht die Art und Weise, wie ppl deine lib-Sammlung benutzt. – minerals

Antwort

0

Ok, nach dem Versuch, verschiedene XML-Bibliotheken zu verwenden, war die eine, die für mich funktionierte xmlreader.

$ sudo luarocks install lua-xmlreader

Dann nach dem xmlreader docs:

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 

Der obigen Code druckt die XML-Struktur des Dokuments aus.