Atom フィードを生成する Lua アプリケーションを作成しています。現在、私は XML を「手で」生成しています。つまり、文字列をファイルに書き込んでいます。
これは最善の方法とは思えませんが、そうかもしれません。エスケープが正確に行われることに神経質になっています。Luaでこのようなことをした人はいますか?
「手で」生成することに固執する必要がありますか? または、既存の C ライブラリのラッパーを作成しますか?
(比較すると、Perl には多くのオプションがあるようです。)
私も手動で 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つの答えがあります。TimBrayのCXMLジェネレーターである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>
個人的には、この種の「ストリーミング」インターフェースは、生成用のツリーベースのインターフェースよりも少し使いやすいと思います。
Lua にもさまざまなデータ永続化ライブラリがあり、多くはLua ユーザーの wikiで説明されています。XMLのページには役立つ情報があります。
Kepler プロジェクトの親切な人たちは、有効な XML を生成するために使用できる HTML 用のジェネレーターを持っています。(デッドリンク。)
XML の生成に使用できる一般化されたテンプレート フレームワークであるcosmoもあります。
編集:
テンプレートが必ずしも出力が適切な形式のままであるという保証を提供しないという懸念を理解しています。整形式のテンプレートが不正な形式のドキュメントを生成した場合、Cosmo の作成者は不満を抱くでしょうが、コンテンツを適切に引用するという問題はまだ残っています。私がそれを使用したコンテキストでは、これは私にとって問題ではありませんでしたが、信頼できないソーステキストから作業していません.
また、LuaForge に投稿された有用なプロジェクトもあります。
Lua Element Treeは、XML ドキュメントをテーブルのツリーとの間でマッピングします。読み取りには Expat を使用し、書き込み時には有効な XML を生成すると主張しています。
LuaSOAP SOAP トランザクションに十分な XML 生成と解析が含まれています。独自のジェネレーターを作成することにした場合、これは RSS や ATOM などの限定された方言の出発点として適している可能性があります。
また、HTML ドキュメント用の完全な DOM を実装し、解析とドキュメント生成の両方をサポートするプロジェクトを見たことがあることは知っていますが、その名前を思い出せず、今日の LuaForge で見つけることもできません。
編集 2: Lua for Windowsに含まれているにもかかわらず、これまで気付かなかった別のパッケージがあります: LuaXML。XML と Lua テーブルのネストの間をマッピングし、XML の読み取りと書き込みの両方を行うことができます。