2014-02-19 61 views
4

對於ASP.NET項目,我編寫了一個控制器操作和一個表單,用戶可以在其中輸入xpath表達式並從服務器上的xml文件中檢索結果。 它工作正常,即使有一些字符串函數像concat,substring-before和substring-after。C#中的字符串連接和令牌化xpath函數

爲了擺脫輸出中的一些逗號,我嘗試使用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函數不正確?

回答

2

string-jointokenize是XPath 2.0函數,但.net的XPathNavigator僅支持XPath 1.0。你不能使用這些函數,並且它們沒有XPath 1.0等價物。

要麼在C#中的XPath之外執行字符串操作,要麼使用某些擴展功能的庫,您可能想看看SaxonBaseX,它們都提供了C#的API。還有更多的開源和商業版本。

一個XPath 1.0破解了這個特殊的例子:translate('The quick brown fox', ' ', ';')將代替空格所有出現的分號..