xstream在从xml转换为Java对象时将&
转换为&
。
我不希望这种情况发生。我该怎么做?
XStream xstream = new XStream(new DomDriver());
xstream.processAnnotations(HelpConfigVO.class);
xstream.processAnnotations(ProductVO.class);
xstream.processAnnotations(PackageVO.class);
xstream.addImplicitCollection(HelpConfigVO.class, "packages");
configVO = (HelpConfigVO)xstream.fromXML(helpConfigData);
其次,我从xstream获取的输出XML没有格式化。如何格式化我的xml以使其可读?
答案 0 :(得分:3)
该软件的网站上写着“XStream是一个简单的库,可以将对象序列化为XML并再次返回”。由于&
是&
的XML,因此它不会转换它是没有意义的,我很怀疑它有“转换为文本,除了&符号,它将继续是XML”功能
听起来你有an XY problem。为什么要在数据中使用&
?
假设这是因为您正在输出XML或HTML,相应的解决方案是将文本视为文本并且:或者
答案 1 :(得分:3)
xstream在从xml转换为Java对象时正在将
"&"
转换为"&"
。
应该如此。如果没有
,它就会被打破我不希望这种情况发生。
为什么呢? XML 中的"&"
表示 "&"
。
我该怎么做?
没有有效的XML解析器会为您执行此操作,因为它严重违反了XML规范。从理论上讲,你可以破解一个开源的XML解析器来做这个可恶的行为......但我强烈反对它。
如果解析器中的正确行为导致您出现问题,那么您的应用程序设计就存在缺陷。你应该做点什么:
不解析XML - 将其存储为字符序列,或
通过在使用之前将XML转义映射应用于文本来重新插入字符实体。
答案 2 :(得分:1)
&
是一个XML实体。
对于Java String,XStream将其转移到&
是有道理的。
答案 3 :(得分:1)
你做不到。 &
表示持久性;这对xstream来说是正确的。如果您确实希望输出为"&"
,则代码中需要&&
,或者将其放在CDATA section内。