XStream di default sfugge inutilmente >
, "
... eccCome posso disabilitare l'escape non necessario in XStream?
C'è un modo per disattivare questo (e solo scappare <
, &
)?
XStream di default sfugge inutilmente >
, "
... eccCome posso disabilitare l'escape non necessario in XStream?
C'è un modo per disattivare questo (e solo scappare <
, &
)?
Questo è il risultato del valore predefinito di PrettyPrintWriter. Personalmente, mi piace sfuggire sia a < che a>. Rende l'output più equilibrato.
Se si desidera l'output XML canonizzato, è necessario utilizzare l'API C14N fornita in Java.
Se il contenuto in streaming include XML, CDATA è un'opzione migliore. Ecco come ho fatto,
XStream xstream = new XStream(
new DomDriver() {
public HierarchicalStreamWriter createWriter(Writer out) {
return new MyWriter(out);}});
String xml = xstream.toXML(myObj);
......
public class MyWriter extends PrettyPrintWriter {
public MyWriter(Writer writer) {
super(writer);
}
protected void writeText(QuickWriter writer, String text) {
if (text.indexOf('<') < 0) {
writer.write(text);
}
else {
writer.write("<[CDATA["); writer.write(text); writer.write("]]>");
}
}
}
XStream non scrive XML da solo, utilizza varie librerie ("driver"?) Per farlo.
Basta scegliere uno che non lo fa. L'elenco è sul loro sito. Immagino che utilizzerebbe XOM per impostazione predefinita.
CDATA non ha funzionato per me, Infine devo lavorare con Apache StringUtils.
StringUtils.replaceEach(xml, new String[]{"<",""","'",">"}, new String[]{"<","\"","'",">"});
Una sezione CDATA non è un'alternativa completa all'escaping, poiché la sequenza ']]>' non può esserci dentro. (A volte viene sfuggito a due sezioni CDATA.) – bobince
Nota che questo comportamento disattiva l'escape globale per il tuo oggetto XStream. Se si desidera disabilitare l'escape quando il testo contiene '<' o altri caratteri specifici, è possibile sostituire 'writer.write (testo);' con 'super.write (writer, text);', ripristinando in tal modo il comportamento di escape predefinito per tutti gli altri casi. –