如何驗證給定的xpath字符串在C#/ .NET中是否有效?驗證.NET中的XPath
我不確定是否運行XPath並捕獲異常是一個有效的解決方案(把膽汁擱在喉嚨裏一會兒) - 如果明天我遇到了其他我沒有測試過的輸入呢?
如何驗證給定的xpath字符串在C#/ .NET中是否有效?驗證.NET中的XPath
我不確定是否運行XPath並捕獲異常是一個有效的解決方案(把膽汁擱在喉嚨裏一會兒) - 如果明天我遇到了其他我沒有測試過的輸入呢?
如何驗證給定的XPath字符串在C#/ .NET中是否有效?
您嘗試從它構建一個XPathExpression
並捕獲異常。
try
{
XPathExpression.Compile(xPathString);
}
catch (XPathException ex)
{
MessageBox.Show("XPath syntax error: " + ex.Message);
}
使用'溫和'的正則表達式來過濾掉完整的垃圾。如果通過正則表達式,只是執行查詢,並捕獲異常,如上面提到...
答案是非常接近到什麼託默勒格寫的(固定的編譯錯誤&把強制性身體向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);
}
}
}
對於除@Tomalak's answer一個較短的版本,你可以使用XPathExpression.Compile方法:
string xpath = "/some/xpath";
try
{
XPathExpression expr = XPathExpression.Compile(xpath);
}
catch (XPathException)
{
}
試試它的東西,特別是?我無法得到一些其他代碼路徑將失敗(在其他文本上運行此XPath時) – ripper234 2008-11-21 14:42:45
Darn。我只是把它輸入到答案中,而不是先用VS來試。當然「XPathDocument」是錯誤的。 – Tomalak 2008-11-21 15:32:52