对于ASP.NET项目,我编写了一个控制器操作和一个表单,用户可以在其中输入xpath表达式并从服务器上的xml文件中检索结果。 它工作正常,即使有一些字符串函数,如concat,substring-before和substring-after。
为了摆脱输出中的一些逗号,我尝试使用string-join和tokenize。但是,通过使用其中一个函数,我最终得到了一个XPathException。
XPathDocument doc = new XPathDocument(@"C:\temp.xml");
XPathNavigator navigator = doc.CreateNavigator();
XmlNamespaceManager nsmgr = new XmlNamespaceManager(navigator.NameTable);
nsmgr.AddNamespace("x", "systemInfo");
var temp = navigator.Evaluate("string-join(tokenize('The quick brown fox', ' '), ';')", nsmgr); // Exception
我没有正确使用这些xpath函数吗?
答案 0 :(得分:2)
string-join
和tokenize
是XPath 2.0函数,但.net的XPathNavigator仅支持XPath 1.0。您不能使用这些函数,并且没有XPath 1.0等效函数。
要么在C#中执行XPath外部的字符串操作,要么使用扩展功能的库,您可能需要查看{C}提供API的Saxon或BaseX。还有一些,包括开源和商业。
针对此特定示例的XPath 1.0 hack:translate('The quick brown fox', ' ', ';')
将使用分号替换所有出现的空格。
答案 1 :(得分:2)
您需要查看第三方解决方案,如.NET版本的Saxon 9或XmlPrime。 XmlPrime的API接近原始的Microsoft,请参阅http://www.xmlprime.com/xmlprime/doc/2.9/T_XmlPrime_ExtensionMethods_XPathNavigatorExtensions.htm,它添加了扩展方法以允许XPath 2.0评估。