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)
clzDomNode=bsf.loadClass("org.w3c.dom.Node")
.local~CDATA_SECTION_NODE=clzDomNode~CDATA_SECTION_NODE
.local~TEXT_NODE =clzDomNode~TEXT_NODE
call followNode rootNode
::requires BSF.CLS
::routine followNode
use arg node
call processNode node
if node~hasChildNodes then
do
children=node~getChildNodes
loop i=0 to children~length-1
call followNode children~item(i)
end
end
::routine processNode
use arg node
nodeType=node~getNodeType
if nodeType=.text_node | nodeType=.cdata_section_node then
say pp(node~nodeValue)
::class ErrorHandler
::method unknown
use arg methName, argArray
exception=argArray[1]
.error~say(methName":"
"line="exception~getLineNumber",col="exception~getColumnNumber":"
pp(exception~getMessage))