【问题标题】:xstream is converting & to & when converting from xml to Java Objects当从 xml 转换为 Java 对象时,xstream 正在将 & 转换为 &
【发布时间】:2012-02-15 01:09:14
【问题描述】:

从 xml 转换为 Java 对象时,xstream 正在将 & 转换为 &。 我不希望这种情况发生。我该怎么做?

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

【问题讨论】:

  • “我不希望这样的事情发生。” - 为什么?这是正确的。
  • 谢谢各位。我现在明白这是正确的方法。

标签: java xml xstream


【解决方案1】:

&是一个 XML 实体。

https://en.wikipedia.org/wiki/List_of_XML_and_HTML_character_entity_references#Predefined_entities_in_XML

对于 Java 字符串,XStream 将其转义为 & 是有意义的。

【讨论】:

    【解决方案2】:

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

    应该如此。不然会坏掉的

    我不希望这种情况发生。

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

    我该怎么做?

    没有有效的 XML 解析器会为您执行此操作,因为它严重违反了 XML 规范。从理论上讲,您可以破解开源 XML 解析器来执行这种可恶的行为……但我强烈建议您不要这样做。


    如果解析器中的正确行为导致您出现问题,则说明您的应用程序设计存在缺陷。你应该这样做:

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

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

    【讨论】:

      【解决方案3】:

      该软件的网站说“XStream 是一个简单的库,可以将对象序列化为 XML 并再次返回”。由于&& 的XML,所以不对其进行转换是没有意义的,而且我非常怀疑它是否具有“转换为文本,除了将继续是XML 的& 符号”功能。

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

      假设是因为您正在输出 XML 或 HTML,则适当的解决方案是将文本视为文本,并且:

      • 使用您正在使用的任何库的“插入文本”功能来构建 XML/HTML(与“插入标记”功能相对)
      • 通过转义函数运行文本(例如 Perl 的 HTML::Entities 模块或 PHP 的 htmlspecialchars 函数(我使用 Java 的程度不足以推荐该语言,但原理相同)。李>

      【讨论】:

      • +1 表示“XY 问题”。终于我知道了这个模式的名字,我的生活又有意义了。
      【解决方案4】:

      你不能。 & 表示和号; xstream 这样做是正确的。如果您确实希望输出为"&",则需要在代码中使用&&,或者将其放在CDATA section 中。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-12-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多