15

如何验证给定的 xpath 字符串在 C#/.NET 中是否有效?

我不确定只运行 XPath 并捕获异常是一个有效的解决方案(暂时搁置我喉咙里的胆汁)——如果明天我遇到一些我没有测试过的其他输入怎么办?

4

4 回答 4

19

如何验证给定的 XPath 字符串在 C#/.NET 中是否有效?

您尝试从中构建一个XPathExpression并捕获异常。

try 
{
    XPathExpression.Compile(xPathString);
}
catch (XPathException ex)
{
    MessageBox.Show("XPath syntax error: " + ex.Message);
}
于 2008-11-21T14:36:14.123 回答
5

答案与 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);
        }
    }
}
于 2008-11-21T15:19:54.363 回答
5

对于比@Tomalak's answer更短的版本,您可以使用XPathExpression.Compile方法:

string xpath = "/some/xpath";

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

}
于 2014-10-30T14:13:59.490 回答
1

使用“温和”的正则表达式过滤掉完整的垃圾。如果它通过了正则表达式,只需执行查询并捕获异常,就像上面提到的......

于 2008-11-21T14:43:21.737 回答