2008-11-21 11 views
11

Wie kann ich überprüfen, ob eine gegebene Xpath-Zeichenfolge in C# /. NET gültig ist?Verifizieren eines XPath in .NET

Ich bin mir nicht sicher, ob ich nur den XPath ausführen und Ausnahmen abfangen kann (für einen Moment legt ich mir die Galle in den Hals) - was ist, wenn ich morgen auf andere Eingaben stoße, gegen die ich nicht getestet habe?

Antwort

13

Wie kann ich überprüfen, ob eine gegebene XPath-Zeichenfolge in C# /. NET gültig ist?

Sie versuchen, eine XPathExpression daraus zu bauen und die Ausnahme zu fangen.

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

es auf das, was Versuchen, speziell? Kann ich nicht zu einem anderen Codepfad gelangen, der fehlschlägt (wenn XPath auf einem anderen Text ausgeführt wird) – ripper234

+0

Darn. Ich habe es einfach in die Antwort eingegeben, anstatt es zuerst mit VS zu versuchen. Natürlich war "XPathDocument" falsch. – Tomalak

+1

Einfach .. XPathExpression.Compile (xPathString); macht das gleiche –

1

Verwenden Sie einen "milden" regulären Ausdruck, um vollständigen Müll herauszufiltern. Wenn es die Regex passiert, nur die Abfrage und fangen Ausnahmen ausführen, wie oben erwähnt ...

5

Die Antwort ist sehr nah, was Tomalak schrieb (fester Kompilierungsfehler & stellte einen verbindlichen Körper auf die 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

Bitte überprüfen Sie meine Antwort noch einmal, ich hatte nicht vor "XPathDocument" zu verwenden. – Tomalak

4

Für eine kürzere Version als @Tomalak's answer, können Sie einfach die XPathExpression.Compile Methode verwenden:

string xpath = "/some/xpath"; 

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

} 
Verwandte Themen