- Timestamp:
- Jun 1, 2009, 2:24:15 PM (15 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
ccr/trunk/p/C0CXPATH.m
r515 r528 114 114 . S ZW2=$P(ZW,"/",1) 115 115 . F ZK=1:1:$L(ZW,"/") D PUSH("ZA",$P(ZW,"/",ZK)) 116 . ZWR ZA116 . ;ZWR ZA 117 117 . S ZW2=ZA(1) 118 118 . F ZK=2:1:ZA(0) D ; … … 129 129 ; 130 130 ;N G1 131 D INDEX(INXML,"G1" ) ; PRODUCES A VDX ARRAY IN G1131 D INDEX(INXML,"G1",1) ; PRODUCES A VDX ARRAY IN G1, NO INDEX IS PRODUCED 132 132 D VDX2XPG(OUTXPG,"G1") ; CONVERTS THE VDX ARRAY TO XPG FORM 133 133 Q … … 137 137 Q 138 138 ; 139 XPG2XML(OUTXML,INXPG,NUM) ; 140 ; OUTPUT XML FROM AN XPG FILE 141 I '$D(NUM) D ; FIRST TIME THROUGH 142 . K @OUTXML 143 . S NUM=1 144 . S ZA="" 145 S G=INXPG 146 S G=@G I G="" Q ; 147 F D ; S G=$Q(@G) Q:G="" D ; 148 . F ZI=1:1:$QL(G) D ; 149 . . I ZI<$QL(G) D ; 150 . . . S ZB=$QS(G,ZI) 151 . . . I ZA(ZA(0))'=ZB D ZXO(ZB) 152 . . . E D ZXC(ZB) 153 . . S ZV="" 154 . . S G2=$QS(G,ZI) 155 . . I ZI=$QL(G) S ZV=@G 156 . . W G2," ",ZV 157 . S G=@G I G="" Q ; 158 . W ! 139 T1 ; TEST OUT THESE ROUTINES 140 D XML2XPG("G2","^GPL") 141 D XPG2XML("G3","G2") 142 K ^GPLOUT 143 M ^GPLOUT=G3 144 W $$OUTPUT^C0CXPATH("^GPLOUT(1)","GPLTEST.xml","/home/vademo2/EHR/p") 145 Q 146 ; 147 XPG2XML(OUTXML,INXPG) ; 148 N C0CN,FWD,ZA,G,GA,ZQ 149 S ZQ=0 ; QUIT FLAG 150 F Q:ZQ=1 D ; LOOP THROUGH EVERYTHING 151 . I '$D(C0CN) D ; FIRST TIME THROUGH 152 . . K @OUTXML ; MAKE SURE OUTPUT ARRAY IS CLEAR 153 . . S FWD=1 ; START OUT GOING FORWARD THROUGH SUBSCRIPTS 154 . . S G=$Q(@INXPG) ; THIS ONE 155 . . S GN=$Q(@G) ; NEXT ONE 156 . . S C0CN=1 ; SUBSCRIPT COUNT 157 . . S ZQ=0 ; QUIT FLAG 158 . . D ZXO("?xml version=""1.0"" encoding=""UTF-8""?") ;MAKE IT REAL XML 159 . . I $QS(G,1)="ContinuityOfCareRecord" D ; 160 . . . D ZXO("?xml-stylesheet type=""text/xsl"" href=""ccr.xsl""?") ; HACK TO MAKE THE CCR STYLESHEET WORK 161 . I FWD D ; GOING FORWARDS 162 . . I C0CN<$QL(G) D ; NOT A DATA NODE 163 . . . S ZA=$QS(G,C0CN) ; PULL OUT THE SUBSCRIPT 164 . . . D ZXO(ZA) ; AND OPEN AN XML ELEMENT 165 . . . I @OUTXML@(@OUTXML@(0))="<ContinuityOfCareRecord>" D ; 166 . . . . S @OUTXML@(@OUTXML@(0))="<ContinuityOfCareRecord xmlns=""urn:astm-org:CCR"">" 167 . . . S C0CN=C0CN+1 ; MOVE TO THE NEXT ONE 168 . . E D ; AT THE DATA NODE 169 . . . S ZA=$QS(G,C0CN) ; PULL OUT THE SUBSCRIPT 170 . . . D ZXVAL(ZA,@G) ; OUTPUT <X>VAL</X> FOR DATA NODE 171 . . . S FWD=0 ; GO BACKWARDS 172 . I 'FWD D ;GOING BACKWARDS 173 . . S GN=$Q(@G) ;NEXT XPATH 174 . . ;W "NEXT!",GN,! 175 . . S C0CN=C0CN-1 ; PREVIOUS SUBSCRIPT 176 . . I GN'="" D ; 177 . . . I $QS(G,C0CN)'=$QS(GN,C0CN) D ; NEED TO CLOSE OFF ELEMENT 178 . . . . D ZXC($QS(G,C0CN)) ; 179 . . . E I GN'="" D ; MORE ELEMENTS AT THIS LEVEL 180 . . . . S G=$Q(@G) ; ADVANCE TO NEW XPATH 181 . . . . S C0CN=C0CN+1 ; GET READY TO PROCESS NEXT SUBSCRIPT 182 . . . . S FWD=1 ; GOING FORWARD NOW 183 . I (GN="")&(C0CN=1) D Q ; WHEN WE ARE ALL DONE 184 . . D ZXC($QS(G,C0CN)) ; LAST ONE 185 . . S ZQ=1 ; QUIT NOW 159 186 Q 160 187 ; … … 173 200 Q 174 201 ; 175 INDEX( ZXML,VDX) ; parse the XML inZXML and produce an XPATH index202 INDEX(IZXML,VDX,NOINX) ; parse the XML in IZXML and produce an XPATH index 176 203 ; GPL 5/24/09 AND OPTIONALLY PRODUCE THE VDX ARRAY PASSED BY NAME 177 204 ; @VDX@("XPATH")=VALUE 178 ; ex. @ ZXML@("XPATH")=FIRSTLINE^LASTLINE205 ; ex. @IZXML@("XPATH")=FIRSTLINE^LASTLINE 179 206 ; WHERE FIRSTLINE AND LASTLINE ARE THE BEGINNING AND ENDING OF THE 180 207 ; XML SECTION 181 ; ZXML IS PASSED BY NAME 208 ; IZXML IS PASSED BY NAME 209 ; IF NOINX IS SET TO 1, NO INDEX WILL BE GENERATED, BUT THE VDX WILL BE 182 210 N I,LINE,FIRST,LAST,CUR,TMP,MDX,FOUND,CURVAL,DVDX,LCNT 183 211 N C0CSTK ; LEAVE OUT FOR DEBUGGING 184 I '$D(@ZXML@(0)) D ; IF COUNT NOT IN NODE 0 COUNT THEM 212 I '$D(NOINX) S NOINX=0 ; IF NOT PASSED, GENERATE AN INDEX 213 N ZXML 214 I NOINX S ZXML=$NA(^TMP("C0CINDEX",$J)) ; TEMP PLACE FOR INDEX TO DISCARD 215 E S ZXML=IZXML ; PLACE FOR INDEX TO KEEP 216 I '$D(@IZXML@(0)) D ; IF COUNT NOT IN NODE 0 COUNT THEM 185 217 . S I="",LCNT=0 186 . F S I=$O(@ ZXML@(I)) Q:I="" S LCNT=LCNT+1187 E S LCNT=@ ZXML@(0) ; LINE COUNT PASSED IN ARRAY218 . F S I=$O(@IZXML@(I)) Q:I="" S LCNT=LCNT+1 219 E S LCNT=@IZXML@(0) ; LINE COUNT PASSED IN ARRAY 188 220 I LCNT=0 D Q ; NO XML PASSED 189 221 . W "ERROR IN XML FILE",! … … 192 224 S C0CSTK(0)=0 ; INITIALIZE STACK 193 225 F I=1:1:LCNT D ; PROCESS THE ENTIRE ARRAY 194 . S LINE=@ ZXML@(I)226 . S LINE=@IZXML@(I) 195 227 . ;W LINE,! 196 228 . S FOUND=0 ; INTIALIZED FOUND FLAG … … 240 272 S @ZXML@("INDEXED")="" 241 273 S @ZXML@("//")="1^"_LCNT ; ROOT XPATH 274 I NOINX K @ZXML ; DELETE UNWANTED INDEX 242 275 Q 243 276 ;
Note:
See TracChangeset
for help on using the changeset viewer.