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 по подразбиране.