C# C中的字符串连接和标记化xpath函数#

C# C中的字符串连接和标记化xpath函数#,c#,xml,xpath,xpathnavigator,C#,Xml,Xpath,Xpathnavigator,对于ASP.NET项目,我编写了一个控制器操作和一个表单,用户可以在其中输入xpath表达式并从服务器上的xml文件检索结果。 它可以很好地工作,即使使用一些字符串函数,如concat、substring before和substring after 为了去掉输出中的一些逗号,我尝试使用字符串连接和标记化。然而,通过使用其中一个函数,我最终得到了一个XPathException XPathDocument doc = new XPathDocument(@"C:\temp.xml"); XPat

对于ASP.NET项目,我编写了一个控制器操作和一个表单,用户可以在其中输入xpath表达式并从服务器上的xml文件检索结果。 它可以很好地工作,即使使用一些字符串函数,如concat、substring before和substring after

为了去掉输出中的一些逗号,我尝试使用字符串连接和标记化。然而,通过使用其中一个函数,我最终得到了一个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函数吗?

string join
tokenize
是xpath 2.0函数,但是.net的XPathNavigator只支持xpath 1.0。您不能使用这些函数,并且没有与之相当的XPath1.0

或者在C#中的XPath之外执行字符串操作,或者使用一些扩展功能的库,您可能想看看或它们都为C#提供了API。还有更多的,开源的和商业的


针对这个特定示例的XPath 1.0破解:
translate('quick brown fox','';')
将用分号替换所有出现的空格。

您需要研究第三方解决方案,如.NET版本的Saxon 9或类似XmlPrime。XmlPrime的API与最初的Microsoft API非常接近,请参见其中添加了扩展方法以允许XPath 2.0评估