Changeset 647 for ccr/trunk/p/C0CMXP.m
- Timestamp:
- Dec 15, 2009, 4:41:11 PM (14 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
ccr/trunk/p/C0CMXP.m
r646 r647 77 77 Q 78 78 ; 79 MKTPLATE( INXML,OUTT) ;MAKE A TEMPLATE FROM INXML, RETURNED IN OUTT79 MKTPLATE(OUTT,INXML,REDUX) ;MAKE A TEMPLATE FROM INXML, RETURNED IN OUTT 80 80 ; BOTH PASSED BY NAME 81 81 ; 82 82 S C0CDOCID=$$PARSE^C0CMXML(INXML,"C0CMKT") 83 83 S C0CDOM=$NA(^TMP("MXMLDOM",$J,C0CDOCID)) 84 ;N GIDX,GIDX2,GARY,GARY2 85 I '$D(REDUX) S REDUX="" 86 D XPATH^C0CMXML(1,"/","GIDX","GARY",,REDUX) 87 D INVERT("GIDX2","GIDX") ;MAKE ARRAY TO LOOK UP XPATH BY NODE 88 N ZI,ZD S ZI="" 89 F S ZI=$O(@C0CDOM@(ZI)) Q:ZI="" D ; FOR EACH NODE IN THE DOM 90 . K ZD ;FOR DATA 91 . D DATA^C0CMXML("ZD",ZI) ;SEE IF THERE IS DATA FOR THIS NODE 92 . I $D(ZD(1)) D ; IF YES 93 . . W !,ZD(1) 94 . . K @C0CDOM@(ZI,"T") ; KILL THE DATA 95 . . S @C0CDOM@(ZI,"T",1)="@@"_$G(GIDX2(ZI))_"@@" 96 D OUTXML^C0CMXML(OUTT,C0CDOCID) 97 Q 98 ; 99 INVERT(OUTX,INX) ;INVERTS AN XPATH INDEX RETURNING @OUTX@(x)=XPath from 100 ; @INX@(XPath)=x 84 101 N ZI S ZI="" 85 F S ZI=$O(@ C0CDOM@(ZI)) Q:ZI="" D ; FOR EACH NODE IN THE DOM86 . W !,ZI,$$TAG^C0CMXML(ZI)102 F S ZI=$O(@INX@(ZI)) Q:ZI="" D ;FOR EACH XPATH IN THE INPUT 103 . S @OUTX@(@INX@(ZI))=ZI ; SET INVERTED ENTRY 87 104 Q 88 105 ; … … 105 122 Q 106 123 ; 124 DEMUXARY(OARY,IARY,DEPTH) ;CONVERT AN XPATH ARRAY PASSED AS IARY TO 125 ; FORMAT @OARY@(x,variablename) where x is the first multiple 126 ; IF DEPTH=2, THE LAST 2 PARTS OF THE XPATH WILL BE USED 127 N ZI,ZJ,ZK,ZL,ZM S ZI="" 128 F S ZI=$O(@IARY@(ZI)) Q:ZI="" D ; 129 . D DEMUX^C0CMXP("ZJ",ZI) 130 . S ZK=$P(ZJ,"^",3) 131 . S ZM=$RE($P($RE(ZK),"/",1)) 132 . I $G(DEPTH)=2 D ;LAST TWO PARTS OF XPATH USED FOR THE VARIABLE NAME 133 . . S ZM=$RE($P($RE(ZK),"/",2))_ZM 134 . S ZL=$P(ZJ,"^",1) 135 . I ZL="" S ZL=0 136 . I $D(@OARY@(ZL,ZM)) D ;IT'S A DUP 137 . . S @OARY@(ZL,ZM_"[2]")=@IARY@(ZI) 138 . E S @OARY@(ZL,ZM)=@IARY@(ZI) 139 Q 140 ; 141 DEMUXXP1(OARY,IARY) ;IARY IS INCOMING XPATH ARRAY 142 ; BOTH IARY AND OARY ARE PASSED BY NAME 143 ; RETURNS A SIMPLE XPATH ARRAY WITHOUT MULTIPLES. DUPLICATES ARE REMOVED 144 N ZI,ZJ,ZK 145 S ZI="" 146 F S ZI=$O(@IARY@(ZI)) Q:ZI="" D ; FOR EACH XPATH IN IARY 147 . D DEMUX^C0CMXP("ZJ",ZI) 148 . S ZK=$P(ZJ,"^",3) ;THE XPATH 149 . S @OARY@(ZK)=@IARY@(ZI) ;THE RESULT. DUPLICATES WILL NOT SHOW 150 . ; CAUTION, IF THERE ARE MULTIPLES, ONLY THE DATA FOR THE LAST 151 . ; MULTIPLE WILL BE INCLUDED IN THE OUTPUT ARRAY, ASSIGNED TO THE 152 . ; COMMON XPATH 153 Q 154 ; 155 DEMUXXP2(OARY,IARY) ; IARY AND OARY ARE PASSED BY NAME 156 ; IARY IS AN XPATH ARRAY THAT MAY CONTAIN MULTIPLES 157 ; OARY IS THE OUTPUT ARRAY WHERE MULTIPLES ARE RETURNED IN THE FORM 158 ; @OARY@(x,Xpath)=data or @OARY@(x,y,Xpath)=data WHERE x AND y ARE 159 ; THE MULTIPLES AND Xpath IS THE BASE XPATH WITHOUT [x] AND [y] 160 ; 161 N ZI,ZJ,ZK,ZX,ZY,ZP 162 S ZI="" 163 F S ZI=$O(@IARY@(ZI)) Q:ZI="" D ; FOR EACH INPUT XPATH 164 . D DEMUX("ZJ",ZI) ; PULL OUT THE MULTIPLES 165 . S ZX=$P(ZJ,"^",1) ;x 166 . S ZY=$P(ZJ,"^",2) ;y 167 . S ZP=$P(ZJ,"^",3) ;Xpath 168 . I ZX="" S ZX=1 ; NO MULTIPLE WILL STORE IN x=1 169 . I ZY'="" D ;IS THERE A y? 170 . . S @OARY@(ZX,ZY,ZP)=@IARY@(ZI) 171 . E D ;NO y 172 . . S @OARY@(ZX,ZP)=@IARY@(ZI) 173 Q 174 ; 107 175 UPDIE ; INTERNAL ROUTINE TO CALL UPDATE^DIE AND CHECK FOR ERRORS 108 176 K ZERR
Note:
See TracChangeset
for help on using the changeset viewer.