需要有关发布xml数据网页的帮助(它应该发布" ^〜\& |"而不是" ^〜\& |")

时间:2014-03-12 21:58:09

标签: html xml jsp

我在oracle数据库中拥有XML数据,并使用servlet类提取并在HTML网页上发布数据。但是在网页上的某个标记值中,它显示为“^~\&|”,但它应该发布为“^~\&|”。我怎样才能做到这一点?我的意思是我想将数据库中的xml发布到网页上。请建议。

<div id="payloadMsg${count.index}">${msg.messagePayload}</div> </div> 

我使用servlet类从数据库中提取数据然后使用JSP我正在发布数据。数据库中的实际数据包含放大器,因此我希望与网页上的数据发布相同。任何人都可以帮忙吗?

2 个答案:

答案 0 :(得分:0)

正如评论中所揭示的那样,本案例中的源数据不正确(?)包含编码实体引用的混合(例如<>)和un - 编码实体(即&)。找出为什么这种不幸的情况正在发生。

正确的解决方案是修复数据,然后 - 始终 - 执行转义为${fn:escapeXml(theRawData)}。也就是说,不是将&替换为&amp;来模拟正确的编码,而是先修复/取消数据 - 例如从数据库中读取数据,或者通过并更正/更新数据库中的数据 - 然后使用更正的数据。

在这种情况下,&#34;修复&#34;功能可能与将&lt;替换为<并将所有&gt;替换为>一样简单,因为它们是受影响的&#34;字符。或者,有existing approaches来处理此类实体转换;然而,需要识别此[部分]双重编码的原因,它可能是XML-in-XML使用不当的结果。


${msg.messagePayload} 中的数据在写入HTML输出之前应该是"HTML escaped",但是给定的环境允许这样做。 (XML有点不同,但问题和解决方法是&#34;足够接近&#34;在这里。)

正在呈现为&amp; & 的数据中&amp;的问题是 &的{​​{3}}。因此,需要将数据作为&amp;amp;写入HTML流。 (<和有时>等字符也存在类似的情况,这就是为什么总是完成转义的原因!)

答案 1 :(得分:0)

在转发前设置${msg.messagePayload}值的控制器中,执行:

msg.messagePayload = msg.messagePayload.replaceAll("&amp;", "&amp;amp;");

msg.messagePayload = msg.messagePayload.replaceAll("&", "&amp;amp;");

无论哪种方式都有效。