在Lua中安全地生成XML

时间:2009-08-12 03:14:05

标签: xml lua rss atom-feed

我正在编写一个生成Atom提要的Lua应用程序。现在,我正在“手动”生成XML - 将字符串写入文件。

这似乎不是最好的方式,尽管它可能是。我对让逃跑完全正确感到紧张。以前有人在Lua做过这样的事吗?

我应该坚持“手工”生成吗?或者为现有的C库编写一个包装器?

(相比之下,Perl似乎有a plethora of options。)

3 个答案:

答案 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>

就个人而言,我发现这种“流媒体”界面比基于树的界面更适合生成。