From a6dd66d95548de3569713c88292a6367dd21dff6 Mon Sep 17 00:00:00 2001 From: george Date: Tue, 6 Oct 2009 21:41:09 +0000 Subject: [PATCH] update for eRx --- p/C0CXPATH.m | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/p/C0CXPATH.m b/p/C0CXPATH.m index 929d862..dd7d2b9 100644 --- a/p/C0CXPATH.m +++ b/p/C0CXPATH.m @@ -56,8 +56,9 @@ PUSHA(ADEST,ASRC) ; PUSH ASRC ONTO ADEST, BOTH PASSED BY NAME . D PUSH(ADEST,@ASRC@(ZGI)) ; PUSH ONE ELEMENT Q ; -MKMDX(STK,RTN) ; MAKES A MUMPS INDEX FROM THE ARRAY STK +MKMDX(STK,RTN,INREDUX) ; MAKES A MUMPS INDEX FROM THE ARRAY STK ; RTN IS SET TO //FIRST/SECOND/THIRD FOR THREE ARRAY ELEMENTS + ; REDUX IS A STRING TO REMOVE FROM THE RESULT S RTN="" N I ; W "STK= ",STK,! @@ -65,6 +66,7 @@ MKMDX(STK,RTN) ; MAKES A MUMPS INDEX FROM THE ARRAY STK . S RTN="//"_@STK@(1) ; FIRST ELEMENT NEEDS NO SEMICOLON . I @STK@(0)>1 D ; SUBSEQUENT ELEMENTS NEED A SEMICOLON . . F I=2:1:@STK@(0) S RTN=RTN_"/"_@STK@(I) + I $G(INREDUX)'="" S RTN=$P(RTN,INREDUX,1)_$P(RTN,INREDUX,2) Q ; XNAME(ISTR) ; FUNCTION TO EXTRACT A NAME FROM AN XML FRAG @@ -199,7 +201,8 @@ ZXVAL(WHAT,VAL) D PUSH(OUTXML,"<"_WHAT_">"_VAL_"") Q ; -INDEX(IZXML,VDX,NOINX,TEMPLATE) ; parse XML in IZXML and produce an XPATH index +INDEX(IZXML,VDX,NOINX,TEMPLATE,REDUX) ; parse XML in IZXML and produce + ; an XPATH index; REDUX is a string to be removed from each xpath ; GPL 7/14/09 OPTIONALLY GENERATE AN XML TEMPLATE IF PASSED BY NAME ; TEMPLATE IS IDENTICAL TO THE PARSED XML LINE BY LINE ; EXCEPT THAT DATA VALUES ARE REPLACED WITH @@XPATH@@ FOR THE XPATH OF THE TAG @@ -212,6 +215,7 @@ INDEX(IZXML,VDX,NOINX,TEMPLATE) ; parse XML in IZXML and produce an XPATH index ; IF NOINX IS SET TO 1, NO INDEX WILL BE GENERATED, BUT THE VDX WILL BE N I,LINE,FIRST,LAST,CUR,TMP,MDX,FOUND,CURVAL,DVDX,LCNT N C0CSTK ; LEAVE OUT FOR DEBUGGING + I '$D(REDUX) S REDUX="" I '$D(NOINX) S NOINX=0 ; IF NOT PASSED, GENERATE AN INDEX N ZXML I NOINX S ZXML=$NA(^TMP("C0CINDEX",$J)) ; TEMP PLACE FOR INDEX TO DISCARD @@ -243,7 +247,7 @@ INDEX(IZXML,VDX,NOINX,TEMPLATE) ; parse XML in IZXML and produce an XPATH index . . . S CUR=$$XNAME(LINE) ; EXTRACT THE NAME . . . S CUR=CUR_$G(LKASD(CUR,I)) ; HANDLE MULTIPLES . . . D PUSH("C0CSTK",CUR) ; ADD TO THE STACK - . . . D MKMDX("C0CSTK",.MDX) ; GENERATE THE M INDEX + . . . D MKMDX("C0CSTK",.MDX,REDUX) ; GENERATE THE M INDEX . . . ; W "MDX=",MDX,! . . . I $D(@ZXML@(MDX)) D ; IN THE INDEX, IS A MULTIPLE . . . . ;I '$D(ZDUP(MDX)) S ZDUP(MDX)=2 @@ -392,7 +396,7 @@ BUILD(BLIST,BDEST) ; A COPY MACHINE THAT TAKE INSTRUCTIONS IN ARRAY BLIST ; QUEUE(BLST,ARRAY,FIRST,LAST) ; ADD AN ENTRY TO A BLIST ; - I DEBUG W "QUEUEING ",BLST,! + I $G(DEBUG) W "QUEUEING ",BLST,! D PUSH(BLST,ARRAY_";"_FIRST_";"_LAST) Q ;