【问题标题】:string-join and tokenize xpath functions in C#C# 中的字符串连接和标记化 xpath 函数
【发布时间】:2014-02-19 15:37:21
【问题描述】:

对于一个 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 函数吗?

【问题讨论】:

    标签: c# xml xpath xpathnavigator


    【解决方案1】:

    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', ' ', ';') 将用分号替换所有出现的空格..

    【讨论】:

      【解决方案2】:

      您需要研究第三方解决方案,例如 Saxon 9 的 .NET 版本或 XmlPrime。 XmlPrime 的 API 接近于最初的 Microsoft API,请参阅http://www.xmlprime.com/xmlprime/doc/2.9/T_XmlPrime_ExtensionMethods_XPathNavigatorExtensions.htm,它添加了扩展方法以允许 XPath 2.0 评估。

      【讨论】:

        猜你喜欢
        • 2018-05-28
        • 1970-01-01
        • 2016-01-09
        • 2018-03-23
        • 1970-01-01
        • 1970-01-01
        • 2021-11-30
        • 1970-01-01
        • 2017-06-10
        相关资源
        最近更新 更多