Lua:
XMLの扱い方

方法:

LuaにはネイティブのXMLパーサーが含まれていませんが、LuaXMLやxml2luaのようなライブラリが存在し、仕事をこなします。xml2luaを使用してXMLを解析する方法を簡単に見てみましょう:

local xml2lua = require("xml2lua")
local handler = require("xmlhandler.tree")

local xmlParser = xml2lua.parser(handler)
xmlParser:parse([[<root><book id="123">Programming in Lua</book></root>]])

print(handler.root.book._attr.id)  -- 出力: 123
print(handler.root.book[1])        -- 出力: Programming in Lua

XMLの書き込みについては、LuaXMLを使った小さな例をこちらに示します:

local luaxml = require("LuaXML")

local xml = xml.new("root")
xml:append("book")[1] = "Programming in Lua"
xml.book._attr = {id="123"}

print(xml:tag())  -- 出力: <root><book id="123">Programming in Lua</book></root>

深く掘り下げて

XMLはExtensible Markup Languageの略で、90年代半ばからデータ表現と交換の標準となっています。XMLはデータに構造を与え、人が読むことができ、マシンが解析可能です。

JSONやYAMLはそのシンプルさから現在好まれていますが、XMLは多くの企業やレガシーシステムで依然として広く使用されています。LuaにはネイティブのXML処理が組み込まれていないのは、Luaが小さいサイズで拡張可能なモジュールを通じて設計されているためです。

LuaXML、xml2luaなどのLua用XMLライブラリは、このギャップを埋めます。LuaXMLは軽量なXMLリーダーとライターを提供し、xml2luaはSAXパーサーに似たイベント駆動のアプローチを使用します。これらのライブラリは通常、携帯性のために純粋なLuaで実装されていますが、一部はパフォーマンスのためにCに依存することがあります。

パフォーマンスとメモリ使用の面で、LuaのXMLライブラリはネイティブサポートを持つ言語のライブラリほど高速ではないかもしれません。しかし、Luaのほとんどの使用例、特にゲーム開発や組み込みシステムのスクリプトでは、これらのライブラリがシステムをオーバーロードすることなく十分な仕事をします。

参照

  • GitHub上のLuaXML:https://github.com/LuaDist/luaxml
  • GitHub上のxml2lua:https://github.com/manoelcampos/xml2lua
  • Lua.orgのライブラリ一覧:https://lua-users.org/wiki/LibrariesAndBindings