我一直在尝试使用XStreamMarshaller在我的Java Spring项目中生成XML输出。我生成的XML在元素文本中有CDATA值。我在命令对象中手动创建此CDATA文本,如下所示:
f.setText("<![CDATA[cdata-text]]>");
XStreamMarshaller生成元素(下面的文本数据是别名):
<text-data><![CDATA[cdata-text]]></text-data>
上面的XML显示符合预期(请忽略上面元素名称中的反斜杠:论坛格式)。但是当我在生成的XML输出上执行查看源时,我会看到元素:<text-data><![CDATA[cdata-text]]></text-data>
。
问题:
正如您所看到的,视图源中的<
和>
替换了小于和大于字符。我需要我的客户端读取源并从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><![CDATA[
Los túneles a través de las montañas hacen más fácil viajar por carretera.
]]></text-data></service>
非常感谢你。
答案 0 :(得分:0)
生成CDATA部分是XML生成库的任务,而不是其客户端的任务。所以你应该简单地写一下
f.setText("cdata-text");
然后图书馆可以决定是否使用<![CDATA[
... ]]>
或<
- 转义其内容。 接收器应该没有区别。
修改强>
看看你的输出,它看起来是正确的(除了CDATA) - 在这里你必须处理你的输入,如上所述。
如果IE在这里抛出错误,很可能你没有声明正确的编码。
我对Spring框架并不是很了解,但Marshaller使用的编码应该与HTTP头(Content-Type: ... ;charset=...
)或<?xml version="1.0" encoding="..." ?>
中发送的编码编码相同。 XML序言(这两者也不应该有所不同)。
我建议将UTF-8
作为编码随处可见,因为这可以代表所有字符,而不仅仅是Latin-1字符。