%% 
%%  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
