2008-11-21 24 views
11

Come posso verificare che una determinata stringa xpath sia valida in C# /. NET?Verifica XPath in .NET

Non sono sicuro che solo l'esecuzione dell'XPath e la rilevazione delle eccezioni sia una soluzione valida (mettendo da parte la bile in gola per un momento) - e se domani incontrassi qualche altro input che non ho testato contro?

risposta

13

Come posso verificare che una determinata stringa XPath sia valida in C# /. NET?

Si tenta di creare un XPathExpression da esso e rilevare l'eccezione.

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

Provalo su quello che, nello specifico? Non riesco ad arrivare ad un altro percorso di codice che fallirà (quando si esegue questo XPath su un altro testo) – ripper234

+0

Darn. L'ho appena inserito nella risposta invece di provarlo prima con VS. Ovviamente "XPathDocument" era sbagliato. – Tomalak

+1

Semplice .. XPathExpression.Compile (xPathString); fa lo stesso –

1

Utilizzare un'espressione regolare 'moderata' per filtrare la spazzatura completa. Se passa la regex, basta eseguire le eccezioni di query e di cattura, come detto sopra ...

5

La risposta è molto vicino a quello che ha scritto Tomalak (errore di compilazione fisso & messo un corpo obbligatorio al 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

Per favore controlla di nuovo la mia risposta, non ho intenzione di usare "XPathDocument". – Tomalak

4

Per una versione più breve di @Tomalak's answer, si può semplicemente utilizzare il metodo XPathExpression.Compile:

string xpath = "/some/xpath"; 

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

}