TMGXML1 ;TMG/kst/XML Exporter -- Testing code ;03/25/06
         ;;1.0;TMG-LIB;**1**;07/09/05
 
 ;"This is a test file for working with XML Documents
Start ;
 
        ;"Kevin Toppenberg, MD  7-9-04
        ;"This is a test file for working with XML Documents
 
        new Y,PATH,FILE,GBLREF
        kill ^TMP("KT",$J)
 
        set PATH="/home/kdtop"
 
        write "-----------------------",!
        read "Enter Filename:",FILE
        write !
        if FILE="^" quit
        if FILE="" set FILE="XMLSample#2.xml" write "Using default: ",FILE,!
 
        set GBLREF="^TMP(""KT"","_$J_",0)"
        set Y=$$FTG^%ZISH(PATH,FILE,GBLREF,3)
        if 'Y write "error opening file.",! quit
 
        ;zwr ^TMP("KT",$JOB,*)
 
        ;"do EN^MXMLTEST($NAME(^TMP("KT",$J)),"V")
 
        write "---------------------------",!
        write "Part #2",!,!
 
        new FileName
        set FileName=PATH_"/"_FILE
        ;write "FileName=",FileName,!
 
        new FnArray
        set FnArray="Array of Callback Functions"
        set FnArray("STARTDOCUMENT")="StartDoc^TMGXML1"
        set FnArray("ENDDOCUMENT")="EndDoc^TMGXML1"
        set FnArray("DOCTYPE")="DocType^TMGXML1"
        set FnArray("STARTELEMENT")="StartElement^TMGXML1"
        set FnArray("ENDELEMENT")="EndElement^TMGXML1"
        set FnArray("CHARACTERS")="Chars^TMGXML1"
 
        ;write "Here is FnArray",!
        ;zwr FnArray(*)
 
        write "Calling EN^MXMLPRSE",!
        do EN^MXMLPRSE($NAME(^TMP("KT",$J)),.FnArray)
        ;do EN^MXMLPRSE(FileName,.FnArray)
        write "Done calling EN^MXMLPRSE",!
 
        write "---------------------------",!
        write "Part #3",!,!
 
        new ParseHandle
        write "Calling EN^MXMLDOM",!
        set ParseHandle=$$EN^MXMLDOM($NAME(^TMP("KT",$J)),"V")
        write "Done calling EN^MXMLDOM",!
        write "Handle=",ParseHandle,!
 
        do ShowNode(1,0)
        do ListChildren(1,1)
 
 
        do DELETE^MXMLDOM(ParseHandle)
 
        kill ^TMP("KT",$J)
        write "********************",!
        write "Quiting normally",!
 
QuitLabel  quit
 
 
 ;"-------------------------------------------------------------
 
StartDoc
        write "##Starting Document Processing##",!
        quit
 
EndDoc
        write "##End of Document Processing##",!
        quit
 
 
DocType(ROOT,PUBID,SYSID)
        write "Doctype encountered.",!
        write "ROOT=",ROOT,!
        write "PUBID=",PUBID,!
        write "SYSID=",SYSID,!
        quit
 
 
StartElement(NAME,ATTRLIST)
        write "Attrib:"
        write "Name=",NAME,!
        if $data(ATTRLIST) do
        . write "AttrList:"
        . zwr ATTRLIST
        quit
 
EndElement(NAME)
        write "End Attrib:"
        write NAME,!
        quit
 
Chars(TEXT)
        write "TEXT:",TEXT,!
        quit
 
 
 ;"-------------------------------------------------------------
 
ListChildren(Node,IndentN)
        new ChildNode
        set ChildNode=$$CHILD^MXMLDOM(ParseHandle,Node,0)
        if ChildNode=0 quit
 
        new loop
        for loop=1:1 do  if ChildNode=0 quit
        . do ShowNode(ChildNode,IndentN)
        . do ListChildren(ChildNode,IndentN+1)
        . set ChildNode=$$CHILD^MXMLDOM(ParseHandle,Node,ChildNode)
 
        quit
 
ShowNode(Node,IndentN)
        new NodeText
        new AttribText
 
        do Indent(IndentN)
        write $$NAME^MXMLDOM(ParseHandle,Node),!
        if $$CMNT^MXMLDOM(ParseHandle,Node,$NAME(NodeText)) do
        . do Indent(IndentN)
        . write "  Comment: ",NodeText(1),!
        if $$TEXT^MXMLDOM(ParseHandle,Node,$NAME(NodeText)) do
        . do Indent(IndentN)
        . write "  '",NodeText(1),"'",!
        set AttribText=$$ATTRIB^MXMLDOM(ParseHandle,Node)
        if $data(AttribText),AttribText'="" do
        . do Indent(IndentN)
        . write "  Attrib: ",AttribText,"="
        . write $$VALUE^MXMLDOM(ParseHandle,Node,AttribText),!
 
        quit
 
 
Indent(IndentN)
        for i=1:1:IndentN write "  "
 
