2012-06-01 5 views
0

У меня есть расширение Java Xalan, которое возвращает DocumentFragment.Содержимое текстового узла экранировано расширением Xalan

В моей XSLT, я призываю его с чем-то вроде:

<xsl:copy-of select="java:org.foo.myMethod($a, $b)" /> 

Проблема заключается в том, что, когда фрагмент документа содержит текстовый узел, содержащий объект, например, «& # 160;», это является вставлен как & amp; # 160;

Обратите внимание, что мне нужно вернуть 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">&amp;</xsl:text><xsl:value-of select="."/> 
</xsl:template> 

Берегись : этот workaro и работает только в некоторых случаях, которые я все еще пытаюсь прикрепить.

Это известная проблема в Xalan 2.7.1?

Есть ли лучший подход (по-прежнему использовать расширения Java, которые возвращают DocumentFragment)?

+0

имеющий отключение-выход-спасаясь = «да» было бы достаточно, если расширение нормального содержания без необходимости что обходной путь, но я думаю, вы сделали это в первую очередь, не так ли? –

ответ

1

Я не знаю, в частности, Xalan, но мне кажется, что ваш Java-код не создает текстовый узел, содержащий ссылку на объект или символ, он создает текстовый узел, содержащий символы (, #, 1 , 6, 0,;).

не это наиболее простой бы просто включить символ 160 в возвращаемой строке:

Text t = document.createTextNode((char)160 + ""); 
+0

Да, после тестирования различных перестановок (возвращающих строк или фрагментов документа, нажимая результат на дальнейшие расширения), я также нашел единственное, что надежно работало, чтобы избежать символьных сущностей и вставить UTF-8 для nbsp (\ u00A0) bullet (\ u2022) и т. д. на конце Java. Благодаря! – JasonPlutext