我有一个返回 DocumentFragment 的 Xalan Java 扩展。
在我的 XSLT 中,我使用以下内容调用它:
<xsl:copy-of select="java:org.foo.myMethod($a, $b)" />
问题是文档片段包含一个包含实体的文本节点,例如“ ”,它被插入为  
请注意,我确实需要返回 DocumentFragment,而不是字符串,因为该文本节点只是返回的 XML 树的一部分。
我正在解决这个问题,如下所示:
在Java代码中:
Element amp = document.createElement("amp");
xhtmlBlock.appendChild(amp);
Text t = document.createTextNode("#160;");
amp.appendChild(t);
在XSLT中:
<xsl:apply-templates select="java:org.foo.myMethod($a, $b)" mode="amp-workaround" />
<xsl:template match="@*|node()" mode="amp-workaround">
<xsl:copy>
<xsl:apply-templates select="@*|node()" mode="amp-workaround" />
</xsl:copy>
</xsl:template>
<xsl:template match="amp" mode="amp-workaround">
<xsl:text disable-output-escaping="yes">&</xsl:text><xsl:value-of select="."/>
</xsl:template>
请注意:此解决方法仅在某些情况下有效,我仍在尝试确定。
这是 Xalan 2.7.1 中的一个已知问题吗?
有没有更好的方法(仍然使用返回 DocumentFragment 的 Java 扩展)?