I haven't tried this option.
When I needed to work with XML, I used xml-sax
xml-sax(e) %handler(XMLHandler : dsCommArea) %xml(uMsgBody : 'ccsid=ucs2');
if %error;
...
endif;
the original xml was in a string that was previously converted to ucs2.
As far as I remember, one of the event types in xml handler is *XML_EXCEPTION and one of the parameters is exceptionId. Maybe it's worth trying to intercept this event?
And I also remember that there were some problems with recognizing and parsing [CDATA] blocks - I had to parse them manually because SAX itself did not recognize them quite adequately.