我更希望这样做没有捕捉中的一个例外 LoadXml() 和使用这种结果的一部分,我的逻辑。任何想法的解决方案不涉及手工分析xml自己?我认为VB有返回值的虚假的这个功能,而不是投掷XmlException.Xml输入提供了从用户。谢谢!

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

解决方案

正好赶上的例外。小的开销从捕捞的一个例外淹没了比较分析XML。

如果你想的功能(对于文体上的原因,不能),实施它自己:

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

其他提示

使用XmlValidatingReader将防止例外情况,如果你提供自己的ValidationEventHandler.

我是无法得到XmlValidatingReader&ValidationEventHandler工作。该XmlException仍然是引发不正确的xml。我检查通过查看的方法与反射器。

我确实需要验证的100个短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没有工作。

任何人成功与regex?

如果捉是太多了你,然后你可能会想要验证XML先使用XML模式,以确保XML是确定的,但可能会更糟。

如已经说过,我还是赶上的例外,但是使用 XmlParserContext, 你可以尝试来分析"手工"和拦截任何异常;但是,除非你是分析100xml碎片每第二,为什么没有赶上的例外?

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top