0

我希望 $content 是预期的字符串。我知道 $content 的 copy-of 而不是 value-of 会产生预期的字符串。但是我如何不使用 copy-of 并将其传递给 java 扩展函数呢?

我在这里问了一个不同的相关问题。

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 中模拟结果文档。

4

1 回答 1

1

调用 Java 扩展函数取决于您使用的 XSLT 处理器,而您没有告诉我们。如果您使用 Java 的 TransformerFactory,您将获得类路径中的任何内容,例如 Xalan 的内置版本、Xalan 的 Apache 版本或 Saxon。

Your description suggests you want to pass a string containing lexical XML to your Java extension function. That implies you need to serialize a node to a string. That can't be achieved without an extension function such as saxon:serialize(). It's probably easier to pass the node to your Java method, and have the Java method do the serialization.

于 2012-10-28T19:11:39.703 回答