0

我一直在尝试使用 XStreamMarshaller 在我的 Java Spring 项目中生成 XML 输出。我生成的 XML 在元素文本中有 CDATA 值。我在命令对象中手动创建这个 CDATA 文本,如下所示:

 f.setText("<![CDATA[cdata-text]]>");

XStreamMarshaller 生成的元素(下面的文本数据是别名)为:

<text-data><![CDATA[cdata-text]]></text-data>

上面的 XML 显示符合预期(请忽略上面元素名称中的反斜杠:论坛格式)。但是,当我对生成的 XML 输出执行查看源代码时,我看到了元素:<text-data>&lt;![CDATA[cdata-text]]&gt;</text-data>.

问题:

如您所见,小于和大于字符已被替换为&lt;&gt;查看源代码。我需要我的客户读取源代码并从 XML 输出中识别 CDATA 部分,这在上述场景中不会。

有没有办法让 XStreamMarshaller 转义我提供的文本中的特殊字符?

我已将 Marshaller 的编码设置为 ISO-8859-1,但这也不起作用。如果 XStreamMarshaller 无法完成上述操作,您能否建议可以为我执行此操作的备用编组器/解组器?

// 按照下面 Paŭlo Ebermann 的建议显示我的 XML 和查看源代码:

XML 视图(在 IE 中显示):

An invalid character was found in text content. Error processing resource 'http://localhost:8080/file-service-framework/fil...

Los t

查看源代码:

<service id="file-text"><text-data>&lt;![CDATA[
Los túneles a través de las montañas hacen más fácil viajar por carretera.
]]&gt;</text-data></service>

非常感谢你。

4

1 回答 1

0

生成 CDATA 部分是您的 XML 生成库的任务,而不是其客户端的任务。所以你应该只需要写

f.setText("cdata-text");

然后库可以决定是否使用<![CDATA[...]]>&lt;-escaping 的内容。对接收者应该没有什么影响


编辑:

查看您的输出,它看起来正确(除了 CDATA) - 在这里您必须处理您的输入,如前所述。

如果 IE 在这里抛出错误,很可能你没有声明正确的编码。

我对 Spring 框架了解不多,但是 Marshaller 使用的编码应该与在 HTTP 标头 ( Content-Type: ... ;charset=...) 或<?xml version="1.0" encoding="..." ?>XML 序言中发送的编码相同(这两者也不应该不同)。

我建议UTF-8在任何地方都使用编码,因为它可以代表所有字符,而不仅仅是 Latin-1 字符。

于 2011-03-09T18:33:21.090 回答