Я использую класс XPathCompiler Saxon HE в VB. NET, чтобы выполнить запросы XPath к файлу XML, а затем обработать результаты. У меня также есть XSL с пользовательскими функциями. Есть ли способ, которым я могу ссылаться на эти пользовательские функции в моих запросах XPath? Я успешно ссылаюсь на них из других XSL, но не знаю, как это сделать, когда я просто выполняю запросы XPath самостоятельно из объекта Saxon XPathCompiler.
По сути, я надеюсь, что есть какой-то способ следующий код, который я могу указать на мою таблицу стилей DocOpsFunctions.xsl и получить доступ к определенным там функциям.
Код:
Dim myProcessor As New Saxon.Api.Processor
Dim myCompiler As XPathCompiler = myProcessor.NewXPathCompiler()
myCompiler.XPathLanguageVersion = "3.1"
Dim myDocBuilder As DocumentBuilder = myProcessor.NewDocumentBuilder
Dim myDoc As XdmNode = myDocBuilder.Build(New Uri("input.xml"))
Dim myResults As XdmValue
myResults = myCompiler.Evaluate("dof:lefttrim('ISTeams/Team'", myDoc)
DocOpsFunctions.xsl:
<xsl:transform version="3.1" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:dof="http://docops.com">
<xsl:function name="dof:lefttrim" as="xs:string">
<xsl:param name="text"/>
<xsl:value-of select="replace($text, '^\s+', '')"/>
</xsl:function>
</xsl:transform>
Ввод . xml:
<ISTeams>
<Team>Team1 </Team1>
<Team>Team2 </Team2>
</ISTeams>
Мне известна возможность определять функции расширения с помощью интерфейса ExtensionFunction, но я надеюсь найти способ сделать это более динамично, чтобы можно было реализовать новые функции. в таблице стилей, а не в коде.