Using xsl 2.0 I\'m trying to convert all uppercase text to having only the first letter of text in each node upper-case. Their are a large number of possible child elements.
This might help you get part of the way.
Not sure about the third "BLAH" though, this text() node starts with a space so there will be some increased difficulty in getting sibling text nodes capitalisation correct. Uncomment the "x" element to see this. You might also want to look at normalizing spaces and the position() function to get further.