2

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

这似乎不是最好的方法,尽管它可能是。我对完全正确的转义感到紧张。以前有没有人在 Lua 中做过这样的事情?

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

(相比之下,Perl 似乎有很多选择。)

4

3 回答 3

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()

我不再有代码,但它适合一个屏幕,包括引用。

于 2009-08-13T02:23:42.657 回答
1

Lua 也有各种数据持久性库,许多在Lua 用户的 wiki中有描述。XML 页面上的信息可以提供帮助。

Kepler 项目的好人有 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。

于 2009-08-12T09:46:45.580 回答
1

我现在对我的问题有了另一个答案:我已经为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-16T01:50:08.327 回答