Index: ccr/trunk/p/GPLCCR.m
===================================================================
--- ccr/trunk/p/GPLCCR.m	(revision 51)
+++ ccr/trunk/p/GPLCCR.m	(revision 52)
@@ -71,4 +71,9 @@
     D EXTRACT^GPLACTORS("ACTT",ACTGLO,"ACTT2")
     D INSINNER^GPLXPATH(CCRGLO,"ACTT2","//ContinuityOfCareRecord/Actors")
+    N I,J,DONE S DONE=0
+    F I=0:0 D  Q:DONE ; DELETE UNTIL ALL EMPTY ELEMENTS ARE GONE
+    . S J=$$TRIM^GPLXPATH(CCRGLO) ; DELETE EMPTY ELEMENTS
+    . W "TRIMMED",J,!
+    . I J=0 S DONE=1 ; DONE WHEN TRIM RETURNS FALSE
     Q
     ;
@@ -160,3 +165,6 @@
  ;;>>>D EXTRACT^GPLACTORS("G2","ACTTEST","G3")
  ;;>>?G3(G3(0))["</Actors>"
+ ;;><TRIM>
+ ;;>>>D ZTEST^GPLCCR("CCR")
+ ;;>>>W $$TRIM^GPLXPATH(CCRGLO)
  ;;></TEST>
Index: ccr/trunk/p/GPLXPATH.m
===================================================================
--- ccr/trunk/p/GPLXPATH.m	(revision 51)
+++ ccr/trunk/p/GPLXPATH.m	(revision 52)
@@ -333,23 +333,37 @@
 TRIM(THEXML) ; TAKES OUT ALL NULL ELEMENTS
        ; THEXML IS PASSED BY NAME
-       N I,J,TMPXML,DEL
-       F I=1:1:@THEXML@(0) D  ; LOOP THROUGH ENTIRE ARRAY
-       . I @THEXML@(I)'["><" D PUSH("TMPXML",@THEXML@(I))
-       D INDEX("TMPXML") ; MAKE AN XPATH INDEX
-       S I="" S I=$O(TMPXML(I))
-       F K=0:0  D  Q:I="" ; NOW LOOK FOR EMPTY SECTIONS
-       . I I["//" D  ;
-       . . W I,TMPXML(I),!
-       . . S J=$P(TMPXML(I),"^",1)
-       . . I J+1=$P(TMPXML(I),"^",2) D  ;
-       . . . W I,!
-       . . . S DEL(J)=""
-       . . . S DEL(J+1)=""
-       . S I=$O(TMPXML(I))
-       F I=1:1:TMPXML(0) D  ;
-       . I '$D(DEL(I))
-       . D PUSH("TMPXML2",TMPXML(I))
-       D CP("TMPXML2",THEXML)
-       Q
+       N I,J,TMPXML,DEL,FOUND
+       S FOUND=0
+       W "DELETING EMPTY ELEMENTS",!
+       F I=1:1:(@THEXML@(0)-1) D  ; LOOP THROUGH ENTIRE ARRAY
+       . S J=@THEXML@(I)
+       . N JM,JP ; JMINUS AND JPLUS
+       . S JM=@THEXML@(I-1) ; LINE BEFORE
+       . S JP=@THEXML@(I+1) ; LINE AFTER
+       . S JPX=$TR(JP,"/","") ; REMOVE THE SLASH
+       . I J=JPX D  ; AN EMPTY ELEMENT ON TWO LINES
+       . . W I,J,JP,!
+       . . S FOUND=1 ; FOUND SOMETHING TO BE DELETED
+       . . S DEL(I)="" ; SET LINE TO DELETE
+       . . S DEL(I+1)="" ; SET NEXT LINE TO DELETE
+       . I J["><" D  ; AN EMPTY ELEMENT ON ONE LINE
+       . . W I,J,!
+       . . S FOUND=1 ; FOUND SOMETHING TO BE DELETED
+       . . S DEL(I)="" ; SET THE EMPTY LINE UP TO BE DELETED
+       . . I JM=JPX D  ;
+       . . . W I,JM_J_JPX,!
+       . . . S DEL(I-1)=""
+       . . . S DEL(I+1)="" ; SET THE SURROUNDING LINES FOR DEL
+       ; . I J'["><" D PUSH("TMPXML",J)
+       I FOUND D  ; NEED TO DELETE THINGS
+       . F I=1:1:@THEXML@(0) D  ; COPY ARRAY LEAVING OUT DELELTED LINES
+       . . I '$D(DEL(I)) D  ; IF THE LINE IS NOT DELETED
+       . . . D PUSH("TMPXML",@THEXML@(I)) ; COPY TO TMPXML ARRAY
+       . ZWR DEL
+       . D CP("TMPXML",THEXML) ; REPLACE THE XML WITH THE COPY
+       Q FOUND
+       ;
+NXTCHLD(HANDLE,NODE,CUR) ; RETURNS THE NEXT CHILD OR "" IF NONE
+       Q $$CHILD^MXMLDOM(HANDLE,NODE,CUR)
        ;
 PARY(GLO)       ;PRINT AN ARRAY
