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

标签 c# xml xpath xpathnavigator

对于一个 ASP.NET 项目,我编写了一个 Controller 操作和一个表单,用户可以在其中输入 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 函数?

最佳答案

string-jointokenize 是XPath 2.0 的函数,但是.net 的XPathNavigator 只支持XPath 1.0。您不能使用这些函数,并且没有与它们等效的 XPath 1.0。

要么在 C# 中的 XPath 之外执行字符串操作,要么使用一些扩展功能的库,您可能想看看 SaxonBaseX它们都为 C# 提供 API。还有一些,既有开源的也有商业的。

针对此特定示例的 XPath 1.0 hack:translate('The quick brown fox', ' ', ';') 将用分号替换所有出现的空格..

关于c# - C# 中的字符串连接和标记化 xpath 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21885239/

相关文章:

C# 解析 XML 文件

java - Spring MVC 是否缓存在 Web 应用程序启动时未加载的 bean 文件?

xpath - selenium findElement 通过 By.id 之外的其他东西

c# - XPath 仅返回特定的子节点但与父节点一起返回 - 可能吗?

c# - 当锁定持续时间尚未过去时,Azure 服务总线对非分区队列抛出 MessageLockLostException

c# - 减少启动 MVC Web 应用程序和查看第一页之间的时间

xml - 将 Nokogiri 文档转换为 Ruby 哈希

javascript - 需要一个 javascript 或 jquery 库来将 xpath 转换为 jquery 中可选择的 CSS3 格式

c# - 是否有用于将 WPF FlowDocument 转换为 WordML 的开源 XSLT?

c# - 与 Fluent Nhibernate 建立一对多关系