Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xml Saxon.Api.DynamicError,“引用;找不到名为{exslt.org/common}node-set()的匹配1参数函数;_Xml_Xslt_Xpath_Saxon - Fatal编程技术网

Xml Saxon.Api.DynamicError,“引用;找不到名为{exslt.org/common}node-set()的匹配1参数函数;

Xml Saxon.Api.DynamicError,“引用;找不到名为{exslt.org/common}node-set()的匹配1参数函数;,xml,xslt,xpath,saxon,Xml,Xslt,Xpath,Saxon,嗨,专家们/迈克尔·凯 通过使用saxon9he-v9.4.0.2,我得到了“Saxon.Api.DynamicError-找不到名为{exslt.org/common}node-set()的匹配单参数函数。没有具有本地名称节点集的Saxon扩展函数”。我的XSLT文件正在调用“EXSLT”。请帮我解决这个问题 public static StringWriter XSLT2(string sourceFile, string XSLT) { Processor processor =

嗨,专家们/迈克尔·凯

通过使用saxon9he-v9.4.0.2,我得到了“Saxon.Api.DynamicError-找不到名为{exslt.org/common}node-set()的匹配单参数函数。没有具有本地名称节点集的Saxon扩展函数”。我的XSLT文件正在调用“EXSLT”。请帮我解决这个问题

public static StringWriter XSLT2(string sourceFile, string XSLT)
{
    Processor processor = new Processor();

    var setting = new XmlReaderSettings { DtdProcessing = DtdProcessing.Parse };
    XmlReader reader2 = XmlReader.Create(sourceFile, setting);
    XdmNode input = processor.NewDocumentBuilder().Build(reader2);
    //XPathCompiler compiler = processor.NewXPathCompiler();
    //compiler.DeclareNamespace("exsl", "http://exslt.org/common");

    // Create a transformer for the stylesheet.
    //Stream XsltTransformer transformer = processor.NewXsltCompiler().Compile(XSLT).Load();
    XsltTransformer transformer = processor.NewXsltCompiler().Compile(new Uri(XSLT + @"\mekontopic.xsl")).Load();
    transformer.InputXmlResolver = new XmlUrlResolver();

    // Set the root node of the source document to be the initial context node
    transformer.InitialContextNode = input;

    // Create a serializer
    StringWriter s = new StringWriter();
    Serializer serializer = new Serializer();//serializer.SetOutputWriter(Console.Out);
    serializer.SetOutputWriter(s);

    // Transform the source XML to System.out.
    transformer.Run(serializer);
    return s;
}
提前谢谢

SARAN

根据,HE版本不支持EXSLT功能。您需要升级到更高版本,或者(最好)重写样式表以利用XSLT2.0,它不需要EXSLT扩展函数


或者您可以降级到XSLT1.0处理器,如Saxon 6.5或Xalan。

一般来说,Saxon HE不提供任何扩展函数;您必须升级到Saxon PE

然而,exslt:node-set()扩展在XSLT1.0代码中使用得非常广泛,因此我们对这一扩展进行了修改,它在Saxon HE 9.6中可用,并且(我认为,需要检查)在9.5中也可用

如果需要,还有另一种解决方法:自己实现。只需将自定义模块添加到包含代码的样式表(导入以前的主模块的主模块)

<xsl:function name="exslt:node-set" as="node()">
  <xsl:param name="n" as="node()"/>
  <xsl:sequence select="$n"/>
</xsl:function>


嗨,Michael,非常感谢您的快速回复。我正在使用第三方XSLT,因此无法更改我的XSLT,在何处/如何获取/购买Saxson EE.dll?@saravanans,可以从下载Saxon的商业版,但您需要在他们的在线商店购买许可证才能运行它们。但是,如果你想做的是使用<代码> EXS:节点集< /代码>,那么我将首先考虑改写样式表,以消除对该函数的任何调用,因为它在XSLT 2中是不必要的,并且除了返回它的参数之外,基本上不在SAXON PE/EE中做任何事情。我喜欢按建议使用,我将自己实现XSLT。非常感谢您的帮助。Michael Kay:我刚刚试用了9.6版HE,但似乎可用函数('exslt:node set')仍然返回false。可能函数在那里,但函数-available()没有意识到?是的,谢谢,我们注意到函数-available()的问题是一个bug: