如何解决在XSL中找不到用户定义函数的源
我继承了对使用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中,该命名空间中的函数被引用如下:
<xsl:value-of select="user:PadString(TransactionHeader/SalesId,20,'padRight')"
在尝试本地调试时,除了空白输出外什么都没有。如果我删除函数调用并仅选择TransactionHeader / SalesId,则将按预期方式获取数据。该流程可以像在Production中运行时一样正常运行,所以我知道这些功能可以正常工作。
我对使用xslt非常陌生,因此如果这是一个基本问题,请原谅。这些功能没有在xsl本身的任何地方定义,因此它们在哪里定义,以便在本地调试时可以使用它们?
解决方法
马丁在这里是完全正确的。在我的情况下,有一个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());
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。