我正在编写一个生成Atom提要的Lua应用程序。现在,我正在“手动”生成XML - 将字符串写入文件。
这似乎不是最好的方式,尽管它可能是。我对让逃跑完全正确感到紧张。以前有人在Lua做过这样的事吗?
我应该坚持“手工”生成吗?或者为现有的C库编写一个包装器?
(相比之下,Perl似乎有a plethora of options。)
答案 0 :(得分:2)
我也手工生成了XML。我创建了一个看起来像这样的API:
function XmlElement(tag, text, attr)
...
end
function XmlSubelement(root, tag, text, attr)
...
end
然后使用它:
local root = XmlElement("Level0")
XmlSubelement(root, "Level1", "some text")
XmlSubelement(root, "Level1", "some more text")
local s = root:tostring()
我不再拥有代码,但它适用于包含引号的一个屏幕。
答案 1 :(得分:1)
Lua还有各种数据持久性库,其中许多都在Lua user's wiki中描述。 page on XML有可能有用的信息。
Kepler project的优秀人员拥有HTML生成器,可用于生成有效的XML。(死链接。)
还有cosmo这是一个通用模板框架,可用于生成XML(以及其他内容)。
修改强>
我理解对模板的关注不一定能保证输出保持良好状态。我很确定,如果格式良好的模板生成了一个格式错误的文档,那么Cosmo的作者会感到不快,但仍然存在正确引用内容的问题。在我使用它的情况下,这对我来说不是问题,但我也没有使用不受信任的源文本。
在LuaForge上发布的项目可能也很有用:
Lua Element Tree将XML文档映射到表树之间。它使用Expat进行读取,并声称在编写时生成有效的XML。
LuaSOAP包括足以用于SOAP事务的XML生成和解析。如果您决定编写自己的生成器,这可能是RSS或ATOM等有限方言的良好起点。
另外,我知道我已经看到一个项目为HTML文档实现了一个完整的DOM并支持解析和文档生成,但是我记不起它的名字或者今天在LuaForge找到它。
编辑2:这是我之前没有注意到的另一个包,即使它包含在Lua for Windows中:LuaXML。它映射XML和Lua表的嵌套,并且可以读取和写入XML。
答案 2 :(得分:1)
我现在还有一个问题的答案:我为Tim Bray's C XML generator, Genx编写了Lua绑定。
这是homepage;这是project on Bitbucket。它现在是一个不完整的绑定,但它适用于简单的任务:
require 'genx'
d = genx.new(io.stdout)
d:startElement('farm')
d:startElement('crop')
d:attribute('type', 'fruit')
d:text('Apricots')
d:endElement()
d:startElement('crop')
d:attribute('type', 'vegetable')
d:text('Zucchini')
d:endElement()
d:endElement()
产地:
<farm><crop type="fruit">Apricots</crop><crop type="vegetable">Zucchini</crop></farm>
就个人而言,我发现这种“流媒体”界面比基于树的界面更适合生成。