Klaus: Brauche Hilfe bei einem AWK-Script

Hallo zusammen,

ich habe eine recht große XML-Datei, die ich mittels des AWK-Scripts parsen möchte.

Die Struktur der XML-Datei sieht folgendermaßen aus:

  
  <trustee path="/DESIGN">  
    <name>.DESIGN.Entwicklung.FIRMA</name>  
    <rights>RWCEMF</rights>  
    <object_guid>382478a-838e-22d7-c75f-0009c74543b0</object_guid>  
  </trustee>  
  <trustee path="/DESIGN/ Druck">  
    <name>.Mustermann.Entwicklung.FIRMA</name>  
    <rights>RWCEMF</rights>  
    <object_guid>a3925401-dbcb-27d5-e072-0000f8a7c3b1</object_guid>  
  </trustee>  

Über die Befehlszeile
  awk -f /scripts/list.awk DEP=2 trustee_database.xml | grep -i mustermann
bekomme ich aber ein Problem, wenn im trustee path ein Leerzeichen enthalten ist (wie im Beispiel beim Ordner ' Druck'.
Die Anzeige bricht dann quasi nach /DESIGN/ ab und ist damit nicht korrekt.

Vielleicht kann sich einer das Script anschauen, wie ich auch diese Ordner korrekt angezeigt bekomme?

Hier natürlich noch das AWK-Script:

  
BEGIN { RS="<";         FS=">"; ORS="\r\n";  
  
        # Change this to alter how many close-tags in a row are needed  
        # before a row of data is printed.  
        if(!DEP) DEP=1  
        SEP="\t"  
        }  
  
# Skip weird XML specification lines or blank records  
/^\?/ || /^$/   {       next    }  
  
# Handle close tags  
/^[/]/  {  
        N=D;    while((N>0) && ("/"STACK[N] != $1))     N--;  
  
        if("/"STACK[N] == $1)   D=(N-1);  
        POP++;  
  
        if(POP == DEP)  
        {  
                if(!HEADER++)  
                {  
                        split(ARG[1], Z, SUBSEP);  
                        printf("%s %s", Z[2], Z[3]);  
                        for(N=2; N<=ARG_; N++)  
                        {  
                                split(ARG[N], Z, SUBSEP);  
                                printf("%s%s %s", SEP, Z[2], Z[3]);  
                        }  
  
                        printf("\n");  
                }  
  
                printf("%s", DATA[ARG[1]]);  
                for(N=2; N<=ARG_; N++)  
                        printf("%s%s", SEP, DATA[ARG[N]]);  
                printf("\n");  
        }  
        next  
}  
  
# Handle open tags  
{  
        gsub(/^[ \r\n\t]*/, "", $2);    # Whitespace isn't data  
        gsub(/[ \r\n\t]*$/, "", $2);  
        sub(/\/$/, "", $(NF-1));  
  
        # Reset parameters  
        POP=0;  
  
        M=split($1, A, " ");  
        STACK[++D]=A[1];  
  
        if((!MAX) || (D>MAX)) MAX=D;    # Save max depth  
  
        # Handle parameters  
        Q=split(A[2], B, " ");  
        for(N=1; N<=Q; N++)  
        {  
                split(B[N], C, "=");  
                gsub(/['"]/,"", C[2]);  
  
                I=D SUBSEP STACK[D] SUBSEP C[1];  
                if(!SEEN[I]++)  
                        ARG[++ARG_]=I;  
  
                DATA[I]=C[2];  
        }  
  
        if($2)  
        {  
                I=D SUBSEP STACK[D] SUBSEP "CDATA";  
                if(!SEEN[I]++)  
                        ARG[++ARG_]=I;  
  
                DATA[I]=$2;  
        }  
}