【发布时间】:2012-10-28 08:27:40
【问题描述】:
我希望 $content 是预期的字符串。我知道 $content 的 copy-of 而不是 value-of 会产生预期的字符串。但是如何不使用 copy-of 并将其传递给 java 扩展函数呢?
我问了一个不同的相关问题here。
XML
<?xml version="1.0"?>
<a>
<b c="d"/>
<b c="d"/>
<b c="d"/>
</a>
XSL
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template name="foo">
<xsl:param name="content"></xsl:param>
<!-- <xsl:copy-of select="$content"></xsl:copy-of> -->
<!-- copy-of produces the expected string here, but how to pass to Java -->
<xsl:value-of select="java:someMethod($content)" />
<!-- I want the content to be the expected string -->
</xsl:template>
<xsl:template match="/">
<xsl:call-template name="foo">
<xsl:with-param name="content">
<xsl:for-each select="a/b">
<e>
<xsl:value-of select="@c" />
</e>
</xsl:for-each>
</xsl:with-param>
</xsl:call-template>
</xsl:template>
</xsl:stylesheet>
想要从 $content 传递给 Java 扩展函数的字符串。
<?xml version="1.0"?>
<e>d</e>
<e>d</e>
<e>d</e>
PS:调用 foo 是强制性的。
最终,我的目标是使用扩展功能在 XSLT 1.0 中模拟结果文档。
【问题讨论】:
-
那么您的方法
someMethod期望什么样的参数?您究竟使用哪种 XSLT(2.0?)处理器?在 XSLT 1.0 中,您将结果树片段传递给扩展函数,在 XSLT 2.0 中,您将临时树片段传递给扩展函数。它如何转换为 Java 类取决于所使用的 XSLT 处理器。然而,它不是字符串,而是代表结果树片段的类的实例,分别是在使用的 XSLT 处理器的实现中的树片段。 -
someMethod 需要一个字符串。我正在使用 XSLT 1.0(对样式表属性感到抱歉。)我正在使用 Java 的 TransformerFactory。我想做的是在 XSLT 1.0 中使用扩展功能做一些类似于结果文档的事情。