Проверьте XPath в .NET.

Как я могу проверить, что данная строка xpath действительна в С#/. NET?

Я не уверен, что просто запуска XPath, и исключения для ловли - это правильное решение (откладывание желчи в горле на мгновение) - что, если завтра я столкнусь с каким-то другим входом, с которым я не тестировал?

Ответ 1

Как я могу проверить, что заданная строка XPath действительна в С#/. NET?

Вы пытаетесь построить из него XPathExpression и поймать исключение.

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

Ответ 2

Ответ очень близок к тому, что написал Tomalak (исправлена ​​ошибка компиляции и поместила обязательное тело в 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);
        }
    }
}

Ответ 3

Для более короткой версии, чем @Tomalak answer, вы можете просто использовать XPathExpression.Compile:

string xpath = "/some/xpath";

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

}

Ответ 4

Используйте "мягкое" регулярное выражение, чтобы отфильтровать полный мусор. Если он передает регулярное выражение, просто выполните запрос и поймайте исключения, как упомянуто выше...