2008-11-21 14 views
11

¿Cómo puedo verificar que una cadena xpath determinada sea válida en C# /. NET?Verificar una XPath en .NET

No estoy seguro de solo ejecutar el XPath y atrapar excepciones es una solución válida (dejando de lado la bilis en mi garganta por un momento) - ¿Qué pasa si mañana encuentro algún otro aporte que no haya probado?

Respuesta

13

¿Cómo puedo verificar que una cadena XPath determinada sea válida en C# /. NET?

Intenta crear un XPathExpression y captura la excepción.

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

Pruébalo en lo que, en concreto? ¿No puedo acceder a alguna otra ruta de código que fallará (al ejecutar este XPath en algún otro texto) – ripper234

+0

Darn. Simplemente lo escribí en la respuesta en lugar de probarlo primero con VS. Por supuesto, "XPathDocument" estaba mal. – Tomalak

+1

Simple .. XPathExpression.Compile (xPathString); hace lo mismo –

1

Utilice una expresión regular 'suave' para filtrar la basura completa. Si se aprueba la expresión regular, sólo hay que ejecutar las excepciones de consulta y de captura, como se mencionó anteriormente ...

5

La respuesta es muy cercano a lo que escribió Tomalak (error de compilación fijo & puso un cuerpo obligatorio el 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); 
     } 
    } 
} 
+0

Revise mi respuesta de nuevo, no tenía la intención de usar "XPathDocument" en absoluto. – Tomalak

4

Para una versión más corta que @Tomalak's answer, sólo se puede utilizar el método de XPathExpression.Compile:

string xpath = "/some/xpath"; 

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

}