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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/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
Xslt 在XSL中找不到用户定义函数的源_Xslt_Azure Functions - Fatal编程技术网

Xslt 在XSL中找不到用户定义函数的源

Xslt 在XSL中找不到用户定义函数的源,xslt,azure-functions,Xslt,Azure Functions,我继承了对使用xslt转换某些xml的过程的支持。我一直试图找到一种本地调试的方法,但我似乎对一些无法找到源代码的自定义函数挂起了电话 xsl中的名称空间定义如下: <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:msx

我继承了对使用xslt转换某些xml的过程的支持。我一直试图找到一种本地调试的方法,但我似乎对一些无法找到源代码的自定义函数挂起了电话

xsl中的名称空间定义如下:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format" 
xmlns:msxsl="urn:schemas-microsoft-com:xslt"  
xmlns:user="urn:transformFunctions">
<xsl:value-of select="user:PadString(TransactionHeader/SalesId,20,'padRight')"

在xsl中,该名称空间中的函数引用如下:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format" 
xmlns:msxsl="urn:schemas-microsoft-com:xslt"  
xmlns:user="urn:transformFunctions">
<xsl:value-of select="user:PadString(TransactionHeader/SalesId,20,'padRight')"

马丁在这里完全正确。在我的例子中,有一个Azure函数处理xml的处理。我最初没有注意到的是,它调用了第二个函数,在这个函数中,重载正在进行

XslCompiledTransform processor = new XslCompiledTransform();
            StringReader styleSheetReader = new StringReader(xsltStr);
            processor.Load(new XmlTextReader(styleSheetReader), new XsltSettings(), new XmlUrlResolver());
            XsltArgumentList argsList = new XsltArgumentList();
            StringReader sr = new StringReader(inputXML);
            XmlReaderSettings settings = new XmlReaderSettings();
            XmlReader xmlReader = XmlReader.Create(sr, settings);
            
            var flatFile= "";
            argsList.AddExtensionObject("urn:transformFunctions", new XsltFunctions());

那么您使用哪个XSLT处理器,如何运行它呢?如果XSLT中没有定义函数,那么答案是这些函数可能是通过处理器的API设置为扩展函数的,XSLT不是要更改或检查的部分,而是运行转换的代码。在本地测试期间,我只是使用Chrome浏览器进行测试。据我所知,只要xml有一个xsl引用,那么所有现代浏览器都应该应用转换。在生产环境中,它是在Azure函数中运行的,但在该函数中没有其他任何地方定义了自定义用户函数(我可以看到)“现代”浏览器倾向于支持1999年的XSLT 1.0版本,并且只支持XSLT处理器特定的方法来定义扩展函数,即使用
xmlns:msxsl=“urn:schemas microsoft com:xslt“
建议使用JScript或VBScript的MSXML,或者使用C#或JScript的.NET。但是浏览器不支持这一点,IE除外。Azure可能允许使用XslCompiledTransform API设置扩展对象和函数,或者提供一些以这种方式设置的预定义函数。因此,使用.NET代码是设置从XSLT调用的.NET代码的相关部分,通过XslCompiledTransform运行。