Frage

Ich würde viel lieber, dies zu tun, ohne eine Ausnahme in LoadXml() zu kontrollieren und die Verwendung dieser Ergebnisse als Teil meiner Logik. Irgendwelche Ideen für eine Lösung, die nicht manuell beinhalten Parsen der XML selbst? Ich denke, dass VB einen Rückgabewert von falsch hat für diese Funktion stattdessen eine XmlException werfen. XML-Eingabe von dem Benutzer zur Verfügung gestellt. Dank viel!

if (!loaded)
{
     this.m_xTableStructure = new XmlDocument();
     try
     {
          this.m_xTableStructure.LoadXml(input);
          loaded = true;
     }
     catch
     {
          loaded = false;
     }
}
War es hilfreich?

Lösung

Nur die Ausnahme abfangen. Der kleine Kopf aus einer Ausnahme fängt ertrinkt im Vergleich zu dem XML-Parsing.

Wenn Sie die Funktion (aus stilistischen Gründen, nicht für die Leistung) wollen, implementieren Sie es selbst:

public class MyXmlDocument: XmlDocument
{
  bool TryParseXml(string xml){
    try{
      ParseXml(xml);
      return true;
    }catch(XmlException e){
      return false;
    }
 }

Andere Tipps

ein XmlValidatingReader verwenden werden die Ausnahmen zu vermeiden, wenn Sie Ihre eigene Validation liefern.

Ich war nicht in der Lage zu bekommen XmlValidatingReader & Validation zu arbeiten. Die XmlException ist immer noch für falsch gebildet xml geworfen. Ich überprüfte dies durch die Methoden mit Reflektor sehen.

Ich brauche zwar 100s von kurzen XHTML Fragmente pro Sekunde zu validieren.

public static bool IsValidXhtml(this string text)
{
   bool errored = false;
   var reader = new XmlValidatingReader(text, XmlNodeType.Element, new XmlParserContext(null, new XmlNamespaceManager(new NameTable()), null, XmlSpace.None));
   reader.ValidationEventHandler += ((sender, e) => { errored = e.Severity == System.Xml.Schema.XmlSeverityType.Error; });

   while (reader.Read()) { ; }
   reader.Close();
   return !errored;
}

XmlParserContext hat nicht funktioniert.

Jeder Erfolg mit einem regex?

Wenn Fang zu viel für Sie ist, dann könnten Sie die XML vorher überprüfen möchten, ein XML-Schema verwenden, um sicherzustellen, dass die XML in Ordnung ist, aber das wird wahrscheinlich schlimmer sein, als zu kontrollieren.

Wie schon gesagt, ich würde eher die Ausnahme abfangen, aber mit XmlParserContext , Sie könnten versuchen, zu analysieren‚manuell‘und abfangen jede Anomalie; jedoch, es sei denn, Sie Parsen 100 XML-Fragmente pro Sekunde, warum nicht die Ausnahme zu kontrollieren?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top