parse arg xmlFileName
factory=bsf.loadClass("javax.xml.parsers.DocumentBuilderFactory")~newInstance
factory~setNamespaceAware(.true)
parser=factory~newDocumentBuilder
eh=.errorHandler~new
javaEH=BsfCreateRexxProxy(eh, , "org.xml.sax.ErrorHandler")
parser~setErrorHandler(javaEH)
rootNode=parser~parse(xmlFileName)
.local~show_element=bsf.getConstant("org.w3c.dom.traversal.NodeFilter", "SHOW_ELEMENT")
whatToShow=.show_element
walker=rootNode~createTreeWalker(rootNode, whatToShow, .nil, .true)
call walkTheTree walker~firstChild, 0
::requires BSF.CLS
::routine walkTheTree
use arg node, level
say " "~copies(level) || pp(node~getNodeName)
child=node~firstChild
do while child<>.nil
if child~getNodeType=.show_element then
call walkTheTree child, level+1
child=child~nextSibling
end
::class ErrorHandler
::method unknown
use arg methName, argArray
exception=argArray[1]
.error~say(methName":"
"line="exception~getLineNumber",col="exception~getColumnNumber":"
pp(exception~getMessage))