Aquí está un método simple para XML unescape. Maneja las entidades XML predefinidas y las entidades numéricas decimales (& #nnnn;). Modificarlo para manejar entidades hexadecimales (& #xhhhh;) debe ser simple.
public static String unescapeXML(final String xml)
{
Pattern xmlEntityRegex = Pattern.compile("&(#?)([^;]+);");
//Unfortunately, Matcher requires a StringBuffer instead of a StringBuilder
StringBuffer unescapedOutput = new StringBuffer(xml.length());
Matcher m = xmlEntityRegex.matcher(xml);
Map<String,String> builtinEntities = null;
String entity;
String hashmark;
String ent;
int code;
while (m.find()) {
ent = m.group(2);
hashmark = m.group(1);
if ((hashmark != null) && (hashmark.length() > 0)) {
code = Integer.parseInt(ent);
entity = Character.toString((char) code);
} else {
//must be a non-numerical entity
if (builtinEntities == null) {
builtinEntities = buildBuiltinXMLEntityMap();
}
entity = builtinEntities.get(ent);
if (entity == null) {
//not a known entity - ignore it
entity = "&" + ent + ';';
}
}
m.appendReplacement(unescapedOutput, entity);
}
m.appendTail(unescapedOutput);
return unescapedOutput.toString();
}
private static Map<String,String> buildBuiltinXMLEntityMap()
{
Map<String,String> entities = new HashMap<String,String>(10);
entities.put("lt", "<");
entities.put("gt", ">");
entities.put("amp", "&");
entities.put("apos", "'");
entities.put("quot", "\"");
return entities;
}
"pero prefiero usar un único método que pueda realizar esta tarea". –
Ese es un método único. – Quentin
Bas, lea el código fuente de commons-lang y vea si vale la pena reinventar la rueda en su caso en lugar de simplemente usarla. –