I'll answer my own question.
I didn't find a way to stop the parser from unescaping the text to begin with, but I did find a workaround (thatnks @user1516873) to re-escape it afterwards using Apache Commons:
String Body = atts.getValue("Body");
String Body_escaped = StringEscapeUtils.escapeXml(Body);
This achieves the desired results.