- Timestamp:
- Oct 13, 2009, 8:38:21 PM (15 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
ccr/trunk/p/C0CMXML.m
r573 r574 1 C0CMXML ; ERX/GPL - MXML based XPath utilities; 10/11/092 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 TEST 23 S C0CXMLIN=$NA(^TMP("C0CMXML",$J)) 24 W $$FTG^%ZISH("/home/vademo2/EHR/p/","mxml-test.xml",$NA(@C0CXMLIN@(1)),3)25 S C0CDOCID=$$PARSE(C0CXMLIN) 26 27 28 29 30 TEST2 31 32 33 34 35 XPATH(ZOID,ZPATH,ZXIDX,ZXPARY,ZNUM,ZREDUX) 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 PARSE(INXML,INDOC) 63 64 65 66 Q $$EN^MXMLDOM(INXML,"D")67 68 ISMULT(ZOID) 69 70 71 72 73 74 FIRST(ZOID) 75 76 77 TAG(ZOID) 78 79 80 NXTSIB(ZOID) 81 82 83 DATA(ZOID) 84 85 86 87 88 I $G(ZT) ZWR ZT89 Q $G(ZT)90 1 C0CMXML ; ERX/GPL - MXML based XPath utilities;10/13/09 17:05 2 ;;0.1;C0P;nopatch;noreleasedate 3 ;Copyright 2009 George Lilly. Licensed under the terms of the GNU 4 ;General Public License See attached copy of the License. 5 ; 6 ;This program is free software; you can redistribute it and/or modify 7 ;it under the terms of the GNU General Public License as published by 8 ;the Free Software Foundation; either version 2 of the License, or 9 ;(at your option) any later version. 10 ; 11 ;This program is distributed in the hope that it will be useful, 12 ;but WITHOUT ANY WARRANTY; without even the implied warranty of 13 ;MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 ;GNU General Public License for more details. 15 ; 16 ;You should have received a copy of the GNU General Public License along 17 ;with this program; if not, write to the Free Software Foundation, Inc., 18 ;51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 19 ; 20 Q 21 ; 22 TEST ; 23 S C0CXMLIN=$NA(^TMP("C0CMXML",$J)) K GARY 24 W $$FTG^%ZISH("FORT$:","mxml-test.xml",$NA(@C0CXMLIN@(1)),3) 25 S C0CDOCID=$$PARSE(C0CXMLIN) W !,"DocID: ",C0CDOCID 26 S REDUX="//ContinuityOfCareRecord/Body" 27 D XPATH(1,"/","GIDX","GARY",,REDUX) 28 Q 29 ; 30 TEST2 ; 31 S REDUX="//soap:Envelope/soap:Body/GetPatientFullMedicationHistory5Response/GetPatientFullMedicationHistory5Result/patientDrugDetail" 32 D XPATH(1,"/","GIDX","GARY","",REDUX) 33 Q 34 ; 35 XPATH(ZOID,ZPATH,ZXIDX,ZXPARY,ZNUM,ZREDUX) ; RECURSIVE ROUTINE TO POPULATE 36 ; THE XPATH INDEX ZXIDX, PASSED BY NAME 37 ; THE XPATH ARRAY XPARY, PASSED BY NAME 38 ; ZOID IS THE STARTING OID 39 ; ZPATH IS THE STARTING XPATH, USUALLY "/" 40 ; ZNUM IS THE MULTIPLE NUMBER [x], USUALLY NULL WHEN ON THE TOP NODE 41 ; ZREDUX IS THE XPATH REDUCTION STRING, TAKEN OUT OF EACH XPATH IF PRESENT 42 I $G(ZREDUX)="" S ZREDUX="" 43 N NEWPATH 44 N NEWNUM S NEWNUM="" 45 I $G(ZNUM)>0 S NEWNUM="["_ZNUM_"]" 46 S NEWPATH=ZPATH_"/"_$$TAG(ZOID)_NEWNUM ; CREATE THE XPATH FOR THIS NODE 47 I $G(ZREDUX)'="" D ; REDUX PROVIDED? 48 . N GT S GT=$P(NEWPATH,ZREDUX,2) 49 . I GT'="" S NEWPATH=GT 50 S @ZXIDX@(NEWPATH)=ZOID ; ADD THE XPATH FOR THIS NODE TO THE XPATH INDEX 51 N GD S GD=$$DATA(ZOID) ; SEE IF THERE IS DATA FOR THIS NODE 52 I GD'="" S @ZXPARY@(NEWPATH)=GD ; IF YES, ADD IT TO THE XPATH ARRAY 53 N ZFRST S ZFRST=$$FIRST(ZOID) ; SET FIRST CHILD 54 I ZFRST'=0 D ; THERE IS A CHILD 55 . N ZMULT S ZMULT=$$ISMULT(ZFRST) ; IS FIRST CHILD A MULTIPLE 56 . D XPATH(ZFRST,NEWPATH,ZXIDX,ZXPARY,$S(ZMULT:1,1:""),ZREDUX) ; DO THE CHILD 57 N GNXT S GNXT=$$NXTSIB(ZOID) 58 I GNXT'=0 D ; 59 . D XPATH(GNXT,ZPATH,ZXIDX,ZXPARY,$S(ZNUM>0:ZNUM+1,1:""),ZREDUX) ; DO NEXT SIB 60 Q 61 ; 62 PARSE(INXML,INDOC) ;CALL THE MXML PARSER ON INXML, PASSED BY NAME 63 ; INDOC IS PASSED AS THE DOCUMENT NAME - DON'T KNOW WHERE TO STORE THIS NOW 64 ; EXTRINSIC WHICH RETURNS THE DOCID ASSIGNED BY MXML 65 ;Q $$EN^MXMLDOM(INXML) 66 Q $$EN^MXMLDOM(INXML,"W") 67 ; 68 ISMULT(ZOID) ; RETURN TRUE IF ZOID IS ONE OF A MULTIPLE 69 N ZN 70 S ZN=$$NXTSIB(ZOID) 71 I ZN'="" Q $$TAG(ZOID)=$$TAG(ZN) ; IF TAG IS THE SAME AS NEXT SIB TAG 72 Q 0 73 ; 74 FIRST(ZOID) ;RETURNS THE OID OF THE FIRST CHILD OF ZOID 75 Q $$CHILD^MXMLDOM(C0CDOCID,ZOID) 76 ; 77 TAG(ZOID) ; RETURNS THE XML TAG FOR THE NODE 78 Q $$NAME^MXMLDOM(C0CDOCID,ZOID) 79 ; 80 NXTSIB(ZOID) ; RETURNS THE NEXT SIBLING 81 Q $$SIBLING^MXMLDOM(C0CDOCID,ZOID) 82 ; 83 DATA(ZOID) ; RETURNS DATA FOR THE NODE 84 N ZT,ZN S ZT="" 85 ;S C0CDOM=$NA(^TMP("MXMLDOM",$J,C0CDOCID)) 86 ;Q $G(@C0CDOM@(ZOID,"T",1)) 87 S ZN=$$TEXT^MXMLDOM(C0CDOCID,ZOID,"ZT") 88 ;I $D(ZT) ZWR ZT 89 Q $G(ZT(1)) 90 ;
Note:
See TracChangeset
for help on using the changeset viewer.