使用disable-output-escaping PI set转义JDOM 2中的属性值

时间:2013-07-03 13:58:23

标签: jdom jdom-2

我正在孵化Apache JSPWiki团队并尝试将我们的项目从JDOM 1.1.2升级到JDOM 2.0.5。 98%的转换似乎工作正常,但我遇到了一个阻止我们升级的问题,涉及JDOM2的XMLOutputter.outputElementContent()。也就是说,我们总是添加一条处理指令来禁用输出转义,但我们仍然期望属性中的&符号和引号被转义为& amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp;和& quot; JDOM1可以根据需要处理此PI,但JDOM2会解释此指令以关闭属性值中的输出转义。我不确定这是否是JDOM2中的错误/功能,或者JSPWiki是否错误地依赖于JDOM1中的错误/功能。 [1]显示了在调用outputElementContent()之前我们如何在JSPWiki中配置Format元素。

例如,在JDOM1中:

<a href="http://www.google.com/?p=a&c=d">Hello</a>

呈现为:

<a href="http://www.google.com/?p=a&amp;c=d">Hello</a> (good, ampersand is escaped)

这是因为在JDOM1中,无论处理指令如何,XMLOutputter.printAttibutes()[2]都会转义属性值。

但在JDOM2中我们得到:

<a href="http://www.google.com/?p=a&c=d">Hello</a>  (bad, still an ampersand character)

...因为在JDOM2中,只有当“getEscapeOutput()”为真时,AbstractXMLOutputProcessor的attributeEscapedEntitiesFilter [3]才会进行转义,但如果设置了disable-output-escaping PI,则getEscapeOutput会自动设置为false [4]。

如果我们调用Format.setIgnoreTrAXEscapingPIs()(或者只是不添加disable-output-escaping PI开头),我们最终会遇到标签被转义的相反问题。

有人能为我们想出一个好的/简单的解决方案吗?

谢谢, 格伦

[1] http://svn.apache.org/viewvc/incubator/jspwiki/trunk/jspwiki-war/src/main/java/org/apache/wiki/render/XHTMLRenderer.java?revision=1486481&view=markup#l56

[2] http://grepcode.com/file/repo1.maven.org/maven2/org.jdom/jdom/1.1/org/jdom/output/XMLOutputter.java#1132

[3] http://grepcode.com/file/repo1.maven.org/maven2/org.jdom/jdom2/2.0.4/org/jdom2/output/support/AbstractXMLOutputProcessor.java#392

[4] http://grepcode.com/file/repo1.maven.org/maven2/org.jdom/jdom2/2.0.4/org/jdom2/output/support/AbstractXMLOutputProcessor.java#665

1 个答案:

答案 0 :(得分:0)

我提出了一个简单的解决方案:

我创建了AbstractXMLOutputProcessor的子类,并重写了attributeEscapedEntitiesFilter(),以便不再检查输出转义被禁用: http://svn.apache.org/viewvc/incubator/jspwiki/trunk/jspwiki-war/src/main/java/org/apache/wiki/render/CustomXMLOutputProcessor.java?revision=1499446&view=markup

...然后将其链接到XMLOutputter(第62行): http://svn.apache.org/viewvc/incubator/jspwiki/trunk/jspwiki-war/src/main/java/org/apache/wiki/render/XHTMLRenderer.java?revision=1499446&view=markup#l62

现在工作正常。