XSLT转换中的Java函数

XSLT转换中的Java函数,java,xml,xslt,xml-parsing,Java,Xml,Xslt,Xml Parsing,我在XML上有一个标记,我需要使用LUHN算法输入XML: <?xml version="1.0" encoding="UTF-8"?> <tag>urn:epc:id:sgtin:0614141.100013.000000000001</tag> } 代码运行得非常完美,但现在我需要在XSLT中调用函数calculateCheckDigits来进行转换: <xsl:stylesheet version="2.0" xmlns:xsl="http:

我在XML上有一个标记,我需要使用LUHN算法输入XML:

<?xml version="1.0" encoding="UTF-8"?>
  <tag>urn:epc:id:sgtin:0614141.100013.000000000001</tag>
}

代码运行得非常完美,但现在我需要在XSLT中调用函数calculateCheckDigits来进行转换:

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:java="java:sumCheck.Luhn">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes" />
<xsl:template match="/">
    <xmlLuhn>
        <xsl:variable name="digits" select="."/>
        Variable Digits:urn:epc:id:sgtin:0614141.100013.000000000001
        <xsl:variable name="Luhn13Digits" select="translate(concat('0',substring($digits,19,13)),'.','')"/>
        Variable Luhn13Digits = 00614141100013
        <xmlLuhn2>
            <xsl:value-of select="java:calculateCheckDigit($Luhn13Digits)"/>
        </xmlLuhn2>
    </xmlLuhn>
</xsl:template>

可变数字:urn:epc:id:sgtin:0614141.100013.000000000001
变量LUHN13位=00614141100013

它不起作用了,你知道怎么做吗?
我已经在Eclipse中的xslt项目上导入了Luhn的.jar,但什么也没有发生。

有各种Java xslt实现,是否/如何调用Java取决于您使用的xslt处理器
version=“2.0”
通常是用Saxon 9完成的,在Saxon 9中,它还取决于版本和您如何与Java交互的确切版本。因此,首先找出或告诉我们您在Java中使用的XSLT处理器,如果是Xalan,请参阅,如果是Saxon,请参阅您使用的特定版本的文档,当前版本9.8的文档位于。您好,Martin,感谢重播。我使用的是SAXON HE9,上面的代码中没有,因为它只是一个示例。我使用SAXONH9将输入XML转换为多个-href=“pallet_{position()}.XML”encoding=“UTF-8”indent=“yes”>但现在我需要从custom.jar调用external.class来使用Luhn函数。对于Saxon,他阅读了这篇文章,它解释了如何以某种方式设置和注册Java代码,以便能够从XSLT调用它。Saxon 9的参考资料zip中还有一个例子,我想你可以从saxonica或Sourceforge下载,你在Wrox P2P论坛上也问过同样的问题。请不要在多个论坛上发布同一个问题-这通常被认为是不礼貌的,因为这意味着在Xsl2.0中执行Luhn校验位的answering.FWIW的人浪费了精力
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:java="java:sumCheck.Luhn">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes" />
<xsl:template match="/">
    <xmlLuhn>
        <xsl:variable name="digits" select="."/>
        Variable Digits:urn:epc:id:sgtin:0614141.100013.000000000001
        <xsl:variable name="Luhn13Digits" select="translate(concat('0',substring($digits,19,13)),'.','')"/>
        Variable Luhn13Digits = 00614141100013
        <xmlLuhn2>
            <xsl:value-of select="java:calculateCheckDigit($Luhn13Digits)"/>
        </xmlLuhn2>
    </xmlLuhn>
</xsl:template>