题
我正在编写一个生成 Atom feed 的 Lua 应用程序。现在,我正在“手动”生成 XML——将字符串写入文件。
这似乎不是最好的方法,尽管它可能是。我对逃跑是否正确感到紧张。有人在 Lua 中做过类似的事情吗?
我应该坚持“手动”生成吗?或者为现有的 C 库编写一个包装器?
(相比之下,Perl 似乎 太多的选择.)
解决方案 2
我现在已经有一个多回答我的问题:我写的Lua绑定的添布雷公司的C XML发生器,GENX 。
下面是其主页;这里的一到位桶的项目。这是一个不完整的结合,现在,但它可以用于简单的任务:
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>
就个人而言,我觉得这样的“流媒体”界面稍微更好比基于树的接口,用于发电的工作。
其他提示
我已经生成手工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()
我没有任何代码长,但它适合在一个屏幕,包括引用上。
Lua 也有各种数据持久化库,许多都在 Lua 用户的 wiki. 。这 XML 页面 有可以提供帮助的信息。
那边的好人 开普勒计划 有 HTML 生成器,可用于生成有效的 XML。 (死链接。)
还有 科斯莫 这是一个通用模板框架,可用于生成 XML(除其他外)。
编辑:
我理解对模板的关注不一定能保证输出保持良好的格式。我很确定,如果格式良好的模板生成格式错误的文档,Cosmo 的作者会不高兴,但仍然存在正确引用内容的问题。在我使用它的环境中,这对我来说不是问题,但我也没有使用不受信任的源文本。
LuaForge 上还发布了一些可能有用的项目:
Lua元素树 将 XML 文档映射到表树或从表树映射 XML 文档。它使用 Expat 进行读取,并声称在写入时生成有效的 XML。
LuaSOAP 包括足以用于 SOAP 事务的 XML 生成和解析。如果您决定编写自己的生成器,那么对于 RSS 或 ATOM 等有限方言来说,这可能是一个很好的起点。
另外,我知道我见过一个项目,它为 HTML 文档实现了完整的 DOM,并支持解析和文档生成,但我不记得它的名称,也无法在 LuaForge 上找到它。
编辑2: 这是我之前没有注意到的另一个包,尽管它包含在 Windows 下的 Lua: LuaXML. 。它在 XML 和 Lua 表嵌套之间进行映射,并且可以读取和写入 XML。