Pregunta

Preferiría hacer esto sin detectar una excepción en LoadXml() y usar estos resultados como parte de mi lógica.¿Alguna idea para una solución que no implique analizar manualmente el xml yo mismo?Creo que VB tiene un valor de retorno falso para esta función en lugar de generar una XmlException.La entrada XML la proporciona el usuario.¡Muchas gracias!

if (!loaded)
{
     this.m_xTableStructure = new XmlDocument();
     try
     {
          this.m_xTableStructure.LoadXml(input);
          loaded = true;
     }
     catch
     {
          loaded = false;
     }
}
¿Fue útil?

Solución

Solo capta la excepción.La pequeña sobrecarga derivada de detectar una excepción se ahoga en comparación con el análisis del XML.

Si desea la función (por razones estilísticas, no por rendimiento), impleméntela usted mismo:

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

Otros consejos

El uso de XmlValidatingReader evitará las excepciones, si proporciona su propio ValidationEventHandler.

No pude hacer que XmlValidatingReader y ValidationEventHandler funcionaran.La XmlException todavía se genera para xml formado incorrectamente.Verifiqué esto viendo los métodos con reflector.

De hecho, necesito validar cientos de fragmentos XHTML cortos por segundo.

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 tampoco funcionó.

¿Alguien tuvo éxito con una expresión regular?

Si capturar es demasiado para usted, es posible que desee validar el XML de antemano, utilizando un esquema XML, para asegurarse de que el XML esté bien, pero eso probablemente será peor que capturar.

Como ya se ha dicho, prefiero detectar la excepción, pero usar XmlParserContexto, podría intentar analizar "manualmente" e interceptar cualquier anomalía;sin embargo, a menos que esté analizando 100 fragmentos xml por segundo, ¿por qué no detectar la excepción?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top