in reply to compacting XML?

I usually use XML::XSH2 for XML manipulation. This code removes all the text that is only whitespace (which is not exactly the same as your specification), but the output is the same as of the other solutions.
for //text() { if xsh:match(., '^\s+$') set . '' }
Update: This should delete only whitespace that has an element sibling:
for //text() { if ((following-sibling::* or preceding-sibling::*) and xsh:match(. +, '^\s+$')) set . '' }