Come verificare la presenza di xml validi nell’input di stringa prima di chiamare .LoadXml ()

Preferisco di gran lunga farlo senza LoadXml() un’eccezione in LoadXml() e utilizzare questi risultati come parte della mia logica. Qualche idea per una soluzione che non coinvolga manualmente l’analisi del xml da solo? Penso che VB abbia un valore di ritorno falso per questa funzione invece di lanciare una XmlException. L’input Xml è fornito dall’utente. Grazie mille!

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

Prendi l’eccezione. Il piccolo sovraccarico derivante dal rilevare un’eccezione annega rispetto all’analisi dell’XML.

Se vuoi la funzione (per motivi stilistici, non per le prestazioni), implementala tu stesso:

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

L’utilizzo di XmlValidatingReader impedisce le eccezioni, se si fornisce il proprio ValidationEventHandler.

Non ero in grado di far funzionare XmlValidatingReader e ValidationEventHandler. XmlException viene ancora generato per xml formato in modo non corretto. Ho verificato questo visualizzando i metodi con riflettore.

Devo effettivamente convalidare 100s di frammenti XHTML al secondo.

 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; } 

Anche XmlParserContext non ha funzionato.

Qualcuno riesce con una regex?

Se la cattura è troppo per te, allora potresti voler prima convalidare l’XML, usando uno schema XML, per assicurarti che l’XML sia ok, ma probabilmente sarà peggio che prenderlo.

Come già detto, preferisco prendere l’eccezione, ma usando XmlParserContext , si potrebbe provare a analizzare “manualmente” e intercettare eventuali anomalie; tuttavia, a meno che non si stiano analizzando 100 frammenti xml al secondo, perché non rilevare l’eccezione?