2011-07-19 87 views

回答

3

.net XPath支持用於XPath 1.0。但是,有一種簡單的方法可以添加對變量的支持,您可以在SQL select調用上執行SetParameter()調用的等價調用。這也支持您定義自己的函數,比如match()。 (這是從我的博客 - Windward Wrocks。)

注意:我無法找到添加對日期不等的支持的方法。如果有人知道添加這種方法,請告訴我。

您需要創建一個自定義XsltContext。兩個很好的參考文獻是Case-insensitive XPath in .NETAdding Custom Functions to XPath

XPathCustomContext.cs中的代碼是有據可查的,而且很直接,所以我不打算在這裏寫出來。但是使用時有兩點要注意:前綴和命名空間值

  1. 改變,因此你不走我們的 命名空間。
  2. 您將一個變量放在XPath中作爲$ name。您將它傳遞給 XsltArgumentList,並將其傳遞給ResolveVariable中的 name(no $)。

這裏是biggie - 您必須使用XpathExpressions調用所有Evaluate()和Select *()調用,如下所示。如果您將XPath中直接傳遞的字符串作爲字符串使用,則會得到一個異常,表示您使用的是未知函數。即使您傳入自定義上下文,也會發生這種情況。

private object SelectSingleNodeTyped(XPathNavigator nav, string select, XsltArgumentList parameters) 
{ 
myContext.ArgList = parameters; 
XPathExpression exp = nav.Compile(myXPathSelect); 
exp.SetContext(myContext); 
object obj = nav.Evaluate(exp); 
相關問題