%%
%%  Ein Beispiel der DANTE-Edition
%%
%%  1. Auflage
%%
%%
%%  Copyright (C) 2013 Herbert Voss
%%
%%  It may be distributed and/or modified under the conditions
%%  of the LaTeX Project Public License, either version 1.3
%%  of this license or (at your option) any later version.
%%
%%  See http://www.latex-project.org/lppl.txt for details.
%%
%%
%% ====
\nopagenumbers\parindent=0pt
%StartShownPreambleCommands
\directlua{function printtable(tb, Ebene)
 Ebene = Ebene or 1
 local tab = "\string\\hbox to "..tostring((Ebene-1)*2).."em{}"
 for k,v in pairs(tb) do
   if type(v) \string~= "table" then
     tex.print("\string\\hbox{"..tab..k.."="..v.."}\string\\par")
   else
     tex.print("\string\\hbox{"..tab..k.."}\string\\par")
     Ebene=Ebene+1
     printtable(v, Ebene)
   end
 end
end

xml = require('luaxml-mod-xml')
handler = require('luaxml-mod-handler')
%---------------------------------------------------
xmlBeispiel = [[
 <a>
   <d>hello</d>
   <b>world.</b>
   <b>another one</b>
 </a>]]
%---------------------------------------------------
treehandler = handler.simpleTreeHandler()
x = xml.xmlParser(treehandler)
}
%StopShownPreambleCommands
\relax
foo \par\tt
\directlua{x:parse(xmlBeispiel)}        \par % Parsen des xml-Codes
\directlua{printtable(treehandler.root)}\par % Ausgeben des xml-Baums als Text

\directlua{print(xml.serialize(treehandler.root))} % Auf der Konsole ausgeben
\directlua{tex.print(treehandler.root["a"]["b"][2])} % Direktzugriff auf einzelne Elemente
\bye