c# – 如何在XPathExpression实例中编程使用XPath函数?
我当前的程序需要使用编程方式创建一个XPathExpression实例来应用于XmlDocument. xpath需要使用一些XPath函数,如“ends-with”.但是,我找不到在XPath中使用“ends-with”的方法.一世
它会像下面那样抛出异常
代码如下: 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调用失败:
任何人都知道用XPathExpression.Compile使用现成的XPath函数的技巧? 解决方法
功能
ends-with() 未为
XPath 1.0定义,但仅针对
XPath 2.0和
XQuery.
你在使用.NET. .NET在此日期不实现XPath 2.0,XSLT 2.0或XQuery. 可以轻松构建XPath 1.0表达式,其评估产生与函数ends-with()相同的结果: $str2 = substring($str1,string-length($str1) – string-length($str2)1) 生成相同的布尔结果(true()或false())为: ($str1,$str2) 在具体情况下,您只需要替换$str1和$str2的正确表达式.相应地,它们是/ myXml / data和’World’. 所以,XPath 1.0表达式使用,相当于XPath 2.0表达式(/ myXml / data,’World’)是: 'World' = substring(/myXml/data,string-length(/myXml/data) - string-length('World') +1 ) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |