كيفية التحقق من صالح xml في سلسلة الإدخال قبل الدعوة .LoadXml()

StackOverflow https://stackoverflow.com/questions/86292

سؤال

أنا أفضل أن تفعل هذا دون اصطياد استثناء في LoadXml() واستخدام هذه النتائج كجزء من المنطق.أي أفكار عن حل لا يتضمن يدويا تحليل xml نفسي ؟ أعتقد VB إرجاع القيمة من false هذه الدالة بدلا من رمي إكسمليكسسيبشن.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 العمل.على إكسمليكسسيبشن لا يزال يلقى على خطأ xml.وأنا التحقق من ذلك من خلال عرض طرق مع عاكس.

أنا في الواقع تحتاج إلى التحقق من صحة 100s قصيرة 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, يمكنك أن محاولة تحليل "يدويا" و اعتراض أي الوضع الشاذ.ومع ذلك, إذا كنت تحليل 100 xml شظايا في الثانية ، لماذا لا اصطياد استثناء ؟

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top