\d xml MX:0N-1 ev:#'/|1(2*-2!#:)'\ fm:{(v@g)@&~0<':0&\+\(,/(#'x)#'1 -1)@g:\:)'x]} cl2:{{r:fr@x;$[0N~r;x;x@'(&~\:)'x]}/x} WS:" \t" tr:{&/(~`cmt=;(|/^" \n\t"?" ",)')@'+x} /tag parse tp:{l:@/1(&0<#:')\1_'(0,@/1(&2!{x'y}[-1+*-/x[2 0]]@)\&|/WS=\:s)_s:-1_x[1] (tp;nm;loc;len;attrs):(`tag;l[0];x[0];#x[1];{(x;-1_2_y)}@/'(0,/:(1_l)?\:"=")_'1_l) +(`tp`nm`loc`len`attrs;(tp;nm;loc;len;attrs))} pt:{c:0,((#c)#0 1)+c:@/1<:\,//x[3 4]-x[0] (tp;loc;len;cnt):(`txt;x[0] #x[1] tr#+(`txt`cmt`cdata@(0,,/((#*)'x[3 4])#'1 2,\:0)@/""=\:x qs:&'"'\""=\:x; sp:-1 1+'sp@'/:&''~^ds?'(sp:&'"!?/]-"=\:x)+\:/:-1 1 (ds;qs;sp)} p2:{(ds;qs;sp):p1[x];:(ds;qs;sp),cc[x;sp]} parse:{(ds;qs;sp;cms;cds):p2[x] (ds;qs;sp):cl[ds;qs;cms;cds;sp] (lvl0[ds,sp[;2]];ps'nds0[x;(qs;cms;cds);,//0 1+/:(ds;sp[;2])])} \d .