是否可以显示“<”或“>”在使用XStreamMarshaller生成的XML源代码中

时间:2011-03-09 15:05:35

标签: java spring-mvc marshalling unmarshalling

我一直在尝试使用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不能做到这一点,你可以建议替代的marshallers / unmarshallers可以为我做这个吗?

//按照PaŭloEbermann的建议显示我的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>

非常感谢你。

1 个答案:

答案 0 :(得分:0)

生成CDATA部分是XML生成库的任务,而不是其客户端的任务。所以你应该简单地写一下

f.setText("cdata-text");

然后图书馆可以决定是否使用<![CDATA[ ... ]]>&lt; - 转义其内容。 接收器应该没有区别


修改

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

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

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

我建议将UTF-8作为编码随处可见,因为这可以代表所有字符,而不仅仅是Latin-1字符。