1 | MXMLTEST ;SAIC/DKM - Test XML SAX interface ;01/31/2002 17:11
|
---|
2 | ;;7.3;TOOLKIT;**58**;Apr 25, 1995
|
---|
3 | ;=================================================================
|
---|
4 | ; This application acts as a client to the XML parser. It displays
|
---|
5 | ; parsing events as they occur and generates a summary at the end.
|
---|
6 | EN(DOC,OPTION) ;
|
---|
7 | N CBK,CNT
|
---|
8 | W !!!,"Invoking XML Parser...",!!!
|
---|
9 | D SET(.CBK),EN^MXMLPRSE(DOC,.CBK,.OPTION)
|
---|
10 | S CNT=""
|
---|
11 | W !!!,"Parser Summary:",!!
|
---|
12 | F S CNT=$O(CNT(CNT)) Q:CNT="" W CNT,":",?25,CNT(CNT),!
|
---|
13 | Q
|
---|
14 | ; Direct entry of XML text from keyboard
|
---|
15 | ; Terminate text entry with a solitary '^'
|
---|
16 | PASTE(OPTION) ;
|
---|
17 | N X,Y,GBL
|
---|
18 | S GBL=$NA(^TMP("MXMLTEST",$J))
|
---|
19 | K @GBL
|
---|
20 | F X=1:1 D Q:Y="^"
|
---|
21 | .W X,"> "
|
---|
22 | .R Y:$G(DTIME,600),!
|
---|
23 | .E S Y="^"
|
---|
24 | .S:Y'="^" @GBL@(X)=Y
|
---|
25 | D EN(GBL,.OPTION)
|
---|
26 | K @GBL
|
---|
27 | Q
|
---|
28 | ; Set the event interface entry points
|
---|
29 | SET(CBK) N X,Y
|
---|
30 | K CBK
|
---|
31 | F X=0:1 S Y=$P($T(SETX+X),";;",2) Q:Y="" D
|
---|
32 | .S CBK(Y)=$E(Y,1,8)_"^MXMLTEST"
|
---|
33 | Q
|
---|
34 | ; Convert special characters to \x format
|
---|
35 | ESC(X) N C,Y,Z
|
---|
36 | F Z=1:1 S C=$E(X,Z) Q:C="" D
|
---|
37 | .S Y=$TR(C,$C(9,10,13,92),"tnc")
|
---|
38 | .S:C'=Y $E(X,Z)=$S(Y="":"\\",1:"\"_Y),Z=Z+1
|
---|
39 | Q X
|
---|
40 | SETX ;;STARTDOCUMENT
|
---|
41 | ;;ENDDOCUMENT
|
---|
42 | ;;DOCTYPE
|
---|
43 | ;;STARTELEMENT
|
---|
44 | ;;ENDELEMENT
|
---|
45 | ;;CHARACTERS
|
---|
46 | ;;PI
|
---|
47 | ;;ERROR
|
---|
48 | ;;COMMENT
|
---|
49 | ;;EXTERNAL
|
---|
50 | ;;NOTATION
|
---|
51 | ;;
|
---|
52 | ; Event interface callbacks
|
---|
53 | STARTDOC ;
|
---|
54 | ENDDOCUM W EVT,"()",!
|
---|
55 | Q
|
---|
56 | DOCTYPE(P1,P2,P3) ;
|
---|
57 | W EVT,"(""",P1,""",""",P2,""",""",P3,""")",!
|
---|
58 | Q
|
---|
59 | STARTELE(ELE,ATR) ;
|
---|
60 | D ARGS(ELE,.ATR),COUNT("Elements")
|
---|
61 | Q
|
---|
62 | ARGS(ELE,ATR) ;
|
---|
63 | N X,Y
|
---|
64 | W EVT,"(""",ELE,""""
|
---|
65 | S X="",Y=","""
|
---|
66 | F S X=$O(ATR(X)) Q:X="" W Y,X,"=",$$ESC(ATR(X)) S Y=";"
|
---|
67 | W $S($L(Y)=1:""")",1:")"),!
|
---|
68 | Q
|
---|
69 | ENDELEME(ELE) ;
|
---|
70 | W EVT,"(""",ELE,""")",!
|
---|
71 | Q
|
---|
72 | CHARACTE(TXT) ;
|
---|
73 | D COUNT("Non-markup Content",$L(TXT))
|
---|
74 | W EVT,"(""",$$ESC(TXT),""")",!
|
---|
75 | Q
|
---|
76 | PI(TGT,TXT) ;
|
---|
77 | D ARGS(TGT,.TXT)
|
---|
78 | D COUNT("Processing Instructions")
|
---|
79 | Q
|
---|
80 | COMMENT(TXT) ;
|
---|
81 | W EVT,"(""",TXT,""")",!
|
---|
82 | D COUNT("Comments")
|
---|
83 | Q
|
---|
84 | EXTERNAL(SYS,PUB,GBL) ;
|
---|
85 | W EVT,"(""",SYS,""",""",PUB,""")",!
|
---|
86 | D COUNT("External Entities")
|
---|
87 | Q
|
---|
88 | NOTATION(NAME,SYS,PUB) ;
|
---|
89 | W EVT,"(""",NAME,""",""",SYS,""",""",PUB,""")",!
|
---|
90 | D COUNT("Notation Declarations")
|
---|
91 | Q
|
---|
92 | COUNT(TYPE,INC) ;
|
---|
93 | S CNT(TYPE)=$G(CNT(TYPE))+$G(INC,1)
|
---|
94 | Q
|
---|
95 | ERROR(ERR) ;
|
---|
96 | N X
|
---|
97 | S X=$P("Warning^Validation Error^Conformance Error","^",ERR("SEV")+1)
|
---|
98 | D COUNT(X_"s")
|
---|
99 | W X,": ",ERR("MSG")
|
---|
100 | W:$G(ERR("ARG"))'="" " (",ERR("ARG"),")"
|
---|
101 | W ". ","Line ",ERR("LIN"),", Position ",ERR("POS"),!
|
---|
102 | W $TR(ERR("XML"),$C(9,10,13)," "),!,$$REPEAT^XLFSTR("-",ERR("POS")-1),"^",!!
|
---|
103 | Q
|
---|