Я пытаюсь использовать Microsoft XPath Extension Functions (те, которые ms:string-сравнивают http://msdn.microsoft.com/en-us/library/ms256114.aspx) в объекте XPathExpression.
Эти функции являются расширениями в библиотеке MSXML, и если я использую их в XslCompiledTransform (просто добавляющий пространство имен "мс"), они работают как очарование:
var xsl =
@"
";
var xslDocument = new XmlDocument();
xslDocument.LoadXml(xsl);
var transform = new XslCompiledTransform();
transform.Load(xslDocument);
Затем я пытался использовать их в XPathExpression:
XPathNavigator nav = document.DocumentElement.CreateNavigator();
XPathExpression expr = nav.Compile("ms:string-compare(/Data/@timeout1, /Data/@timeout2)");
XmlNamespaceManager manager = new XmlNamespaceManager(document.NameTable);
manager.AddNamespace("ms", "urn:schemas-microsoft-com:xslt");
expr.SetContext(manager);
nav.Evaluate(expr);
Но я добираюсь, исключение "XsltContext необходимо для этого запроса из-за неизвестной функции".
XsltContext является определенный XmlNamespaceManager, но я не знаю, возможно ли инстанцировать его без фактического XslCompiledTransform (это абстрактно), и используйте его в качестве моего контекста выражения.
Есть ли любой способ сделать это (или любой другой способ использовать мс: расширения в XPathExpression)?