xmlua.XMLStreamSAXParser クラス

概要

このクラスは、SAX(Simple API for XML)を使ってXMLをパースするクラスです。

XMLSAXParserと異なるのは、XMLStreamSAXParserは、1つのファイルにに複数のルート要素があってもパースできることです。

XMLSAXParserと同じように、以下のイベント発生時に呼び出されるコールバックメソッドを登録できます。

コールバックイベント一覧:

コールバックメソッドの登録方法は、以下のようにlistener(listenerはLuaのテーブルです。)にコールバックメソッドを追加して、XMLStreamSAXParserの引数に与えます。

local listener = {}
function listener:start_element(local_name,
                                prefix,
                                uri,
                                namespaces,
  -- You want to execute code
end
local parser = xmlua.XMLStreamSAXParser.new(listener)
local parse_succeeded = parser:parse(xml)

クラスメソッド

xmlua.XMLStreamSAXParser.new(listener) -> XMLStreamSAXParser

listener: コールバックメソッドを登録したテーブル

XMLStreamSAXParserオブジェクトを作成します。

以下のようにxmlua.XMLStreamSAXParserクラスのオブジェクトを作成できます。

例:

local xmlua = require("xmlua")

local listener = {
  elements = {},
  errors = {},
}
function listener:start_element(local_name, ...)
  -- 実行したいコード
end
function listener:error(error)
  -- 実行したいコード
end
local parser = xmlua.XMLStreamSAXParser.new(listener)

インスタンスメソッド

parse(xml) -> boolean

xml: パース対象のXML文字列

与えられたXMLをパースします。XMLのパースが成功した場合は、このメソッドはtrueを返します。XMLのパースに失敗した場合は、falseを返します。

例:

local xmlua = require("xmlua")

-- XML to be parsed
  local xml = [[
<root/>
<root/>
<root/>
]]

-- ファイル内のテキストをパースしたい場合は
-- 自分でファイルの内容を読み込む必要があります。

-- local xml = io.open("example.xml"):read("*all")

-- register your callback method
local listener = {
  elements = {},
  errors = {},
}
function listener:start_element(local_name, ...)
  table.insert(self.elements, local_name)
end
function listener:error(error)
  table.insert(self.errors, error.message)
end

-- SAXを使ってXMLをパースする。
local parser = xmlua.XMLStreamSAXParser.new(listener)
local parse_succeeded = parser:parse(xml)
f not success then
  print("Failed to parse XML with SAX")
  os.exit(1)
end

finish() -> boolean

SAXを使ったXMLのパースを終了します。

parseを使ってパースを開始した場合は、パース完了後にこのメソッドを呼ぶ必要があります。

このメソッドを呼ばないと、最後のドキュメント用のend_documentイベントは発生しないかもしれません。