Как я могу отключить ненужное экранирование в XStream? - PullRequest
7 голосов
/ 23 мая 2010

XStream по умолчанию излишне экранируется >, " ... и т. Д.

Есть ли способ отключить это (и только экранировать <, &)?

Ответы [ 3 ]

7 голосов
/ 23 мая 2010

Это результат по умолчанию PrettyPrintWriter. Лично мне нравится избегать как <, так и>. Это делает вывод более сбалансированным.

Если вы хотите канонизированный вывод XML, вам следует использовать API C14N, предоставляемый в Java.

Если потоковый контент содержит XML, CDATA - лучший вариант. Вот как я это сделал,

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("]]>"); 
        }
    }
}
1 голос
/ 29 марта 2016

Cdata не работает для меня, Наконец я должен работать с Apache StringUtils.

StringUtils.replaceEach(xml, new String[]{"&lt;","&quot;","&apos;","&gt;"}, new String[]{"<","\"","'",">"});
0 голосов
/ 23 мая 2010

XStream не пишет XML самостоятельно, для этого он использует различные библиотеки («драйверы»?)

Просто выберите тот, который не. Список есть на их сайте. Я думаю, он будет использовать XOM по умолчанию.

...