xstream正在转换&到&从xml转换为Java对象时

时间:2012-01-20 13:07:51

标签: java xml xstream

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以使其可读?

4 个答案:

答案 0 :(得分:3)

该软件的网站上写着“XStream是一个简单的库,可以将对象序列化为XML并再次返回”。由于&&的XML,因此它不会转换它是没有意义的,我很怀疑它有“转换为文本,除了&符号,它将继续是XML”功能

听起来你有an XY problem。为什么要在数据中使用&

假设这是因为您正在输出XML或HTML,相应的解决方案是将文本视为文本并且:或者

  • 使用您用于构建XML / HTML的任何库的“插入文本”功能(而不是“插入标记”功能)
  • 通过转义函数(例如Perl的HTML::Entities模块或PHP的htmlspecialchars函数运行文本(我不使用Java足以推荐一种语言,但原理是相同的) )。

答案 1 :(得分:3)

  

xstream在从xml转换为Java对象时正在将"&"转换为"&"

应该如此。如果没有

,它就会被打破
  

我不希望这种情况发生。

为什么呢? XML 中的"&"表示 "&"

  

我该怎么做?

没有有效的XML解析器会为您执行此操作,因为它严重违反了XML规范。从理论上讲,你可以破解一个开源的XML解析器来做这个可恶的行为......但我强烈反对它。


如果解析器中的正确行为导致您出现问题,那么您的应用程序设计就存在缺陷。你应该做点什么:

  • 不解析XML - 将其存储为字符序列,或

  • 通过在使用之前将XML转义映射应用于文本来重新插入字符实体。

答案 2 :(得分:1)

&是一个XML实体。

请参阅https://en.wikipedia.org/wiki/List_of_XML_and_HTML_character_entity_references#Predefined_entities_in_XML

对于Java String,XStream将其转移到&是有道理的。

答案 3 :(得分:1)

你做不到。 &表示持久性;这对xstream来说是正确的。如果您确实希望输出为"&",则代码中需要&&,或者将其放在CDATA section内。