如何在调用.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呢?