У меня есть файл XSLT в # проекта C так:Вызов C# функция в XSLT саксонскими
<msxsl:script language="C#" implements-prefix="user">
<![CDATA[
public string Test()
{
return "test1";
}
]]>
</msxsl:script>
...
<xsl:value-of select="user:Test()"/>
я трансформировал свой файл XML с помощью этого XSLT, как это:
//Enable execute C# function in xslt
var Xsltsettings = new XsltSettings();
Xsltsettings.EnableScript = true;
XslCompiledTransform xsl = new XslCompiledTransform();
xsl.Load(XslFile, Xsltsettings, new XmlUrlResolver());
// get transformed results
StringWriter sw = new StringWriter();
XsltArgumentList xslarg = new XsltArgumentList();
xsl.Transform(xdoc, xslarg, sw);
sw.Close();
я стараюсь использовать с XSLT 2.0 на saxon9he-апи как это:
Processor processor = new Processor();
// Load the source document.
string sourceUri = @"D:\testXML.xml";
XdmNode input = processor.NewDocumentBuilder().Build(new Uri(sourceUri));
// Create a transformer for the stylesheet.
string xsltUri = @"D:\testXSLT.xslt";
XsltTransformer transformer = processor.NewXsltCompiler().Compile(new Uri(xsltUri)).Load();
// Set the root node of the source document to be the initial context node.
transformer.InitialContextNode = input;
Serializer serializer = new Serializer();
StringBuilder sb = new StringBuilder();
TextWriter writer = new StringWriter(sb);
serializer.SetOutputWriter(writer);
transformer.Run(serializer); //Error line
Но этот код имеет ошибку ниже:
Не удается найти соответствующую функцию 0-аргумента с именем {урна: мои-скрипты} Test()
Я прочитал много поста, но я не нашел решение для решения этой проблемы.
Было бы очень полезно, если бы кто-нибудь мог объяснить решение этой проблемы.
Вам не придется переписать его в Java, Saxon позволяет вызывая расширение функций, написанных на языке C# - см Http: //www.saxonica .com/documentation/index.html #! extensibility/dotnetextensions - но вам нужно использовать соглашения о саксонских вызовах, а не Microsoft. Обратите внимание, что с XSLT 2.0 необходимость в функциях расширения значительно снижается, потому что вы можете делать большинство вещей, которые вам нужны в XSLT/XPath. –
Также обратите внимание, что для механизма «рефлексивных функций расширения» требуется Saxon-PE или выше. –