2008-11-21 54 views
11

如何驗證給定的xpath字符串在C#/ .NET中是否有效?驗證.NET中的XPath

我不確定是否運行XPath並捕獲異常是一個有效的解決方案(把膽汁擱在喉嚨裏一會兒) - 如果明天我遇到了其他我沒有測試過的輸入呢?

回答

13

如何驗證給定的XPath字符串在C#/ .NET中是否有效?

您嘗試從它構建一個XPathExpression並捕獲異常。

try 
{ 
    XPathExpression.Compile(xPathString); 
} 
catch (XPathException ex) 
{ 
    MessageBox.Show("XPath syntax error: " + ex.Message); 
} 
+0

試試它的東西,特別是?我無法得到一些其他代碼路徑將失敗(在其他文本上運行此XPath時) – ripper234 2008-11-21 14:42:45

+0

Darn。我只是把它輸入到答案中,而不是先用VS來試。當然「XPathDocument」是錯誤的。 – Tomalak 2008-11-21 15:32:52

1

使用'溫和'的正則表達式來過濾掉完整的垃圾。如果通過正則表達式,只是執行查詢,並捕獲異常,如上面提到...

5

答案是非常接近到什麼託默勒格寫的(固定的編譯錯誤&把強制性身體向XML):

public static class XPathValidator 
{ 
    /// <summary> 
    /// Throws an XPathException if <paramref name="xpath"/> is not a valid XPath 
    /// </summary> 
    public static void Validate(string xpath) 
    { 
     using (MemoryStream stream = new MemoryStream(Encoding.UTF8.GetBytes("<xml></xml>"))) 
     { 
      XPathDocument doc = new XPathDocument(stream); 
      XPathNavigator nav = doc.CreateNavigator(); 
      nav.Compile(xpath); 
     } 
    } 
} 
4

對於除@Tomalak's answer一個較短的版本,你可以使用XPathExpression.Compile方法:

string xpath = "/some/xpath"; 

try 
{ 
    XPathExpression expr = XPathExpression.Compile(xpath); 
} 
catch (XPathException) 
{ 

}