如何在调用.LoadXml()之前检查stringinput中的有效xml

我更喜欢这样做,而不会在LoadXml()捕获exception,并将此结果作为我的逻辑的一部分。 任何想法的解决scheme,不涉及手动parsingxml自己? 我认为这个函数VB的返回值是false,而不是抛出一个XmlException。 Xmlinput是由用户提供的。 非常感谢!

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

赶上例外。 与parsingXML相比,捕获exception的小开销会淹死。

如果你想要的function(出于文体原因,而不是性能),你自己实现:

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

如果您提供自己的ValidationEventHandler,使用XmlValidatingReader将会防止exception。

我无法获得XmlValidatingReader&ValidationEventHandler的工作。 XmlException仍然是由于形成不正确的XML而引发的。 我通过查看reflection器的方法validation了这一点。

我的确需要每秒validation100个短的XHTML片段。

 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也没有工作。

任何人都成功的正则expression式?

如果捕获对您来说太多了,那么您可能需要事先validationXML,使用XML Schema来确保XML是正确的,但是这可能比捕获更糟糕。

正如已经说过,我宁愿捕捉exception,但使用XmlParserContext ,你可以尝试parsing“手动”,并拦截任何exception; 然而,除非你每秒钟parsing100个xml片段,为什么不捕获exception呢?