XStream по умолчанию без необходимости экранирует >
,"
... и т.д.
Есть ли способ отключить это (и экранировать только <
, &
)?
XStream по умолчанию без необходимости экранирует >
,"
... и т.д.
Есть ли способ отключить это (и экранировать только <
, &
)?
Это результат работы PrettyPrintWriter по умолчанию. Лично мне нравится экранировать как ‹, так и >. Это делает вывод более сбалансированным.
Если вам нужен канонизированный вывод XML, вам следует использовать C14N API, предоставляемый в 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("]]>");
}
}
}
]]>
. (Иногда он разделяется на два раздела CDATA.)
- person bobince; 24.05.2010
writer.write(text);
на super.write(writer, text);
, тем самым восстановив поведение экранирования по умолчанию для всех остальных случаев.
- person John Rix; 19.03.2015
writer.write("<![CDATA[");
.
- person Simon White; 08.08.2018
Cdata у меня не работает, наконец, мне нужно работать с Apache StringUtils.
StringUtils.replaceEach(xml, new String[]{"<",""","'",">"}, new String[]{"<","\"","'",">"});
XStream не пишет XML самостоятельно, для этого он использует различные библиотеки («драйверы»?).
Просто выберите тот, который не работает. Список есть на их сайте. Я предполагаю, что он будет использовать XOM по умолчанию.