我在孵化 Apache JSPWiki 团队并尝试将我们的项目从 JDOM 1.1.2 升级到 JDOM 2.0.5。98% 的转换似乎工作正常,但我遇到了一个阻止我们升级的问题,涉及 JDOM2 的 XMLOutputter.outputElementContent()。也就是说,我们总是添加一个处理指令来禁用输出转义,但我们仍然希望属性中的 & 和引号被转义为 & 和“。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&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 中,AbstractXMLOutputProcessor 的 attributeEscapedEntitiesFilter[3] 只有在“getEscapeOutput()”为真时才会进行转义,但如果设置了 disable-output-escaping PI,getEscapeOutput 会自动设置为 false[4]。
如果我们调用 Format.setIgnoreTrAXEscapingPIs() (或者只是不添加禁用输出转义 PI 开始),我们最终会遇到标签被转义的相反问题。
谁能为我们想出一个好的/简单的解决方案?
谢谢,格伦