В моей текущей программе необходимо программно создать экземпляр XPathExpression для применения к XmlDocument. Xpath должен использовать некоторые функции XPath, такие как «заканчивается на». Однако я не могу найти способ использовать "заканчивается на" в XPath. я
Он генерирует исключение, как показано ниже
Необработанное исключение: System.Xml.XPath.XPathException: требуется диспетчер пространства имен или текст XsltC. Этот запрос имеет префикс, переменную или определяемую пользователем функцию.
в MS.Internal.Xml.XPath.CompiledXpathExpr.get_QueryTree () в System.Xml.XPath.XPathNavigator.Evaluate (XPathExpression expr, XPathNodeIt erator context) < br> в System.Xml.XPath.XPathNavigator.Evaluate (выражение XPathExpression)
Код такой:
XmlDocument xdoc = new XmlDocument();
xdoc.LoadXml(@"<?xml version=""1.0"" encoding=""utf-8"" ?>
<myXml xmlns=""http://MyNamespace"" xmlns:fn=""http://www.w3.org/2005/xpath-functions"">
<data>Hello World</data>
</myXml>");
XPathNavigator navigator = xdoc.CreateNavigator();
XPathExpression xpr;
xpr = XPathExpression.Compile("fn:ends-with(/myXml/data, 'World')");
object result = navigator.Evaluate(xpr);
Console.WriteLine(result);
Я попытался изменить код, чтобы вставить XmlNamespaceManager при компиляции выражения, как показано ниже.
XmlDocument xdoc = new XmlDocument();
xdoc.LoadXml(@"<?xml version=""1.0"" encoding=""utf-8"" ?>
<myXml xmlns=""http://MyNamespace"" xmlns:fn=""http://www.w3.org/2005/xpath-functions"">
<data>Hello World</data>
</myXml>");
XPathNavigator navigator = xdoc.CreateNavigator();
XmlNamespaceManager nsmgr = new XmlNamespaceManager(xdoc.NameTable);
nsmgr.AddNamespace("fn", "http://www.w3.org/2005/xpath-functions");
XPathExpression xpr;
xpr = XPathExpression.Compile("fn:ends-with(/myXml/data, 'World')", nsmgr);
object result = navigator.Evaluate(xpr);
Console.WriteLine(result);
Ошибка при вызове XPathExpression.Compile:
Необработанное исключение: System.Xml.XPath.XPathException: XsltContext необходим для этого запроса из-за неизвестной функции. в MS.Internal.Xml.XPath.CompiledXpathExpr.UndefinedXsltContext.ResolveFuncti on (префикс строки, имя строки, XPathResultType [] ArgTypes) в MS.Internal.Xml.XPath.FunctionQuery.SetXsltContext (XsltContext.Internal context.XsltContext.XsltContext. XPath.CompiledXpathExpr.SetContext (XmlNamespaceManager nsM anager) в System.Xml.XPath.XPathExpression.Compile (String xpath, IXmlNamespaceResolv er nsResolver)
Кто-нибудь знает, как использовать стандартные функции XPath с XPathExpression.Compile? Спасибо