From d96f6224371a0c6aaf561f16d31381e5b11e5a55 Mon Sep 17 00:00:00 2001
From: madmaxoft
+ With an event-based API like SAX the XML document can be fed to the parser in chunks, and the + parsing begins as soon as the parser receives the first document chunk. LuaExpat reports parsing + events (such as the start and end of elements) directly to the application through callbacks. The + parsing of huge documents can benefit from this piecemeal operation.
++ See the online + {{http://matthewwild.co.uk/projects/luaexpat/manual.html#parser|LuaExpat documentation}} for details + on how to work with this parser. The code examples below should provide some basic help, too. + ]], + Functions = + { + new = {Params = "CallbacksTable, [SeparatorChar]", Return = "XMLParser object", Notes = "Creates a new XML parser object, with the specified callbacks table and optional separator character."}, + }, + Constants = + { + _COPYRIGHT = { Notes = "" }, + _DESCRIPTION = { Notes = "" }, + _VERSION = { Notes = "" }, + }, + AdditionalInfo = + { + { + Header = "Parser callbacks", + Contents = [[ + The callbacks table passed to the new() function specifies the Lua functions that the parser + calls upon various events. The following table lists the most common functions used, for a + complete list see the online + {{http://matthewwild.co.uk/projects/luaexpat/manual.html#parser|LuaExpat documentation}}.
+Function name | Parameters | Notes |
---|---|---|
CharacterData | Parser, string | Called when the parser recognizes a raw string inside the element |
EndElement | Parser, ElementName | Called when the parser detects the ending of an XML element |
StartElement | Parser, ElementName, AttributesTable | Called when the parser detects the start of an XML element. The AttributesTable is a Lua table containing all the element's attributes, both in the array section (in the order received) and in the dictionary section. |
+local Depth = 0; + +-- Define the callbacks: +local Callbacks = { + CharacterData = function(a_Parser, a_String) + LOG(string.rep(" ", Depth) .. "* " .. a_String); + end + + EndElement = function(a_Parser, a_ElementName) + Depth = Depth - 1; + LOG(string.rep(" ", Depth) .. "- " .. a_ElementName); + end + + StartElement = function(a_Parser, a_ElementName, a_Attribs) + LOG(string.rep(" ", Depth) .. "+ " .. a_ElementName); + Depth = Depth + 1; + end +} + +-- Create the parser: +local Parser = lxp.new(Callbacks); + +-- Parse the XML file: +local f = io.open("file.xml", "rb"); +while (true) do + local block = f:read(128 * 1024); -- Use a 128KiB buffer for reading + if (block == nil) then + -- End of file + break; + end + Parser:parse(block); +end + +-- Signalize to the parser that no more data is coming +Parser:parse(); + +-- Close the parser: +Parser:close(); ++ ]], + }, + }, -- AdditionalInfo + }, -- lxp + TakeDamageInfo = { Desc = [[ -- cgit v1.2.3