Index: /ccr/trunk/p/C0CXPATH.m
===================================================================
--- /ccr/trunk/p/C0CXPATH.m	(revision 556)
+++ /ccr/trunk/p/C0CXPATH.m	(revision 557)
@@ -226,4 +226,5 @@
  I $D(VDX) S DVDX=1 ; IF NAME PASSED, DO VDX
  S C0CSTK(0)=0 ; INITIALIZE STACK
+ D MKLASD(.LKASD,IZXML) ;MAKE LOOK ASIDE BUFFER FOR MULTIPLES
  F I=1:1:LCNT  D  ; PROCESS THE ENTIRE ARRAY
  . S LINE=@IZXML@(I)
@@ -240,4 +241,5 @@
  . . . S FOUND=1  ; SET FOUND FLAG
  . . . 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
@@ -267,4 +269,5 @@
  . . . S $P(@ZXML@(MDX),"^",2)=I ; UPDATE LAST LINE NUMBER
  . . . D POP("C0CSTK",.TMP) ; REMOVE FROM STACK
+ . . . S TMP=$P(TMP,"[",1) ; REMOVE [X] FROM MULTIPLE
  . . . I TMP'=CUR  D  ; MALFORMED XML, END MUST MATCH START
  . . . . W "MALFORMED XML ",CUR,"LINE "_I_LINE,!
@@ -276,4 +279,5 @@
  . . . S FOUND=1  ; SET FOUND FLAG
  . . . 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
@@ -281,4 +285,5 @@
  . . . I $D(@ZXML@(MDX))  D  ; IN THE INDEX, IS A MULTIPLE
  . . . . S $P(@ZXML@(MDX),"^",2)=I ; UPDATE LAST LINE NUMBER
+ . . . . ;B
  . . . I '$D(@ZXML@(MDX))  D  ; NOT IN THE INDEX, NOT A MULTIPLE
  . . . . S @ZXML@(MDX)=I_"^" ; INSERT INTO THE INDEX
@@ -286,4 +291,30 @@
  S @ZXML@("//")="1^"_LCNT ; ROOT XPATH
  I NOINX K @ZXML ; DELETE UNWANTED INDEX
+ Q
+ ;
+MKLASD(OUTBUF,INARY) ; CREATE A LOOKASIDE BUFFER FOR MULTILPLES
+ ;
+ N ZI,ZN,ZA,ZLINE,ZLINE2,CUR,CUR2
+ F ZI=1:1:LCNT-1  D  ; PROCESS THE ENTIRE ARRAY 
+ . S ZLINE=@IZXML@(ZI)
+ . I ZI<LCNT S ZLINE2=@IZXML@(ZI+1)
+ . I ZLINE?.E1"</"1.E  D  ; NEXT LINE CONTAINS END OF A SECTION
+ . . S CUR=$$XNAME(ZLINE) ; EXTRACT THE NAME
+ . . I (ZLINE2?.E1"<"1.E)&(ZLINE'["?>")  D  ; BEGINNING OF A SECTION
+ . . . S CUR2=$$XNAME(ZLINE2) ; EXTRACT THE NAME 
+ . . . I CUR=CUR2 D  ; IF THIS IS A MULTIPLE
+ . . . . S OUTBUF(CUR,ZI+1)=""
+ ;ZWR OUTBUF
+ S ZI=""
+ F  S ZI=$O(OUTBUF(ZI)) Q:ZI=""  D  ; FOR EACH KIND OF MULTIPLE
+ . S ZN=$O(OUTBUF(ZI,"")) ; LINE NUMBER OF SECOND MULTIPLE
+ . F  S ZN=$O(@IZXML@(ZN),-1) Q:ZN=""  I $P(@IZXML@(ZN),"<"_ZI,2)=">" Q  ;
+ . S OUTBUF(ZI,ZN)=""
+ S ZA=1,ZI="",ZN=""
+ F  S ZI=$O(OUTBUF(ZI)) Q:ZI=""  D  ; ADDING THE COUNT FOR THE MULIPLES [x]
+ . S ZN="",ZA=1
+ . F  S ZN=$O(OUTBUF(ZI,ZN)) Q:ZN=""  D  ;
+ . . S OUTBUF(ZI,ZN)="["_ZA_"]"
+ . . S ZA=ZA+1
  Q
  ;
