xslt—在java中为xsl创建extensionfunctiondefinition时,structuredqname中的uri是什么

bwleehnv  于 2021-07-12  发布在  Java
关注(0)|答案(1)|浏览(426)

我正在尝试用java为xsl模板创建一个saxon扩展。我复制粘贴了我们经常用来“获取灵感”的解决方案中的代码。
当我执行收到的代码时:

2020-11-17 11:26:45,866 ERROR [stderr] XPST0017 XPath syntax error at char 0 on line 58 near {...($data.pwd...}:
2020-11-17 11:26:45,866 ERROR [stderr]    Cannot find a matching 1-argument function named
2020-11-17 11:26:45,866 ERROR [stderr]       {http://com.aaa.bbb.intializer/xsl/extensions}decrypt-rsa()

我唯一想到的是重写方法getfunctionqname()中uri的配置。

package it.ccc.bbb.xxx.util;

class XSLDecrypt extends ExtensionFunctionDefinition
{
    private static final String CLASS_NAME = XSLDecryptRSA.class.getName();
    private static final Logger LOGGER = Logger.getLogger(CLASS_NAME);

    @Override
    public StructuredQName getFunctionQName ()
    {
        return new StructuredQName("aaa", "http://com.aaa.bbb.intializer/xsl/extensions", "decrypt");
    }

传入构造函数的正确uri是什么?
在我的xsl中,我放了:

<xsl:stylesheet version="2.0" xmlns:aaa="http://com.aaa.bbb.intializer/xsl/extensions">
   ...
   <Parameter Key="password">
       <xsl:value-of select="aaa:decrypt($data.pwd)"/>
   </Parameter>

谢谢大家的帮助!

66bbxpm5

66bbxpm51#

问题的解决方案是在配置中定义新的扩展。saxonica的文档中对此进行了解释。

public class XSLExtensions
{
    private static final ExtensionFunctionDefinition[] xslExtensions;

    static
    {
        xslExtensions = new ExtensionFunctionDefinition[] {
                new XSLDecrypt()
        };
    }

    public static ExtensionFunctionDefinition[] getExtensions()
    {
        return xslExtensions;
    }

    public static void applyTo (net.sf.saxon.Configuration saxonConfig)
    {
        if (xslExtensions != null && xslExtensions.length > 0)
        {
            for(ExtensionFunctionDefinition xslExtension : xslExtensions)
            {
                saxonConfig.registerExtensionFunction(xslExtension);
            }
        }
    }
}

这是在运行时应用给定配置的类,在本例中,它在我的解决方案中添加了唯一的扩展:xsldecrypt。
假设必须(在运行时)调用方法applyto(),那么它应该存在一个执行该操作的入口点。不幸的是,我的项目所基于的产品不允许我这么做,所以我们选择了porkaround除息的
再见!

相关问题