在Lua中安全地生成XML

我正在编写一个 Lua 应用程序,用于生成 Atom feed。目前,我正在“手动”生成 XML——将字符串写入文件。

虽然这似乎是最好的方法,但它可能不是。我开始担心是否能够完全正确地转义。有没有人在 Lua 中做过类似的事情?

我应该坚持手动生成吗?还是为现有的 C 库编写包装器?

(相比之下,Perl 似乎有许多选项。)

原文链接 https://stackoverflow.com/questions/1264038

点赞
stackoverflow用户68204
stackoverflow用户68204

Lua有各种数据持久性库,很多在Lua用户Wiki上有描述。有关XML的页面有可供使用的信息。

Kepler项目友好的人们有用于生成有效XML的HTML生成器(已经失效)。

还有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。

2009-08-12 09:46:45
stackoverflow用户15795
stackoverflow用户15795

我也曾手动生成过 XML。我创建了一个看起来像这样的 API:

function XmlElement(tag, text, attr)
    ...
end

function XmlSubelement(root, tag, text, attr)
    ...
end

然后使用它:

local root = XmlElement("Level0")
XmlSubelement(root, "Level1", "一些文本")
XmlSubelement(root, "Level1", "更多的文本")

local s = root:tostring()

虽然我不再有这段代码了,但它可以在一个屏幕上包含引号。

2009-08-13 02:23:42
stackoverflow用户39182
stackoverflow用户39182

我现在对我的问题有了一个答案:我为 Tim Bray的C XML生成器,Genx撰写了Lua绑定。

这是它的首页,这是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>

就个人而言,我觉得这种“流式”接口比基于树的接口更容易使用。

2009-08-16 01:50:08