Как проверить на допустимый xml в строковом входе прежде, чем назвать.LoadXml ()

В Java все находится в форме класса.

Если вы хотите использовать любой объект, тогда у вас есть две фазы:

  1. Объявить
  2. Инициализация

Пример:

  • Объявление: Object a;
  • Инициализация: a=new Object();

То же самое для концепции массива

  • Объявление: Item i[]=new Item[5];
  • Инициализация: i[0]=new Item();

Если вы не дают секцию инициализации, тогда возникает NullpointerException.

39
задан 8 revs, 3 users 58% 16 November 2012 в 19:26
поделиться

5 ответов

Просто поймайте исключение. Маленькие издержки от ловли исключения тонут по сравнению с парсингом XML.

, Если Вы хотите функцию (по стилистическим причинам, не по производительности), реализуйте его сами:

public class MyXmlDocument: XmlDocument
{
  bool TryParseXml(string xml){
    try{
      ParseXml(xml);
      return true;
    }catch(XmlException e){
      return false;
    }
 }
61
ответ дан Rasmus Faber 27 November 2019 в 02:27
поделиться

Используя XmlValidatingReader предотвратит исключения, если Вы обеспечите свой собственный ValidationEventHandler.

10
ответ дан Sunny Milenov 27 November 2019 в 02:27
поделиться

Если ловля слишком много для Вас, то Вы могли бы хотеть проверить XML заранее, с помощью XML-схемы, удостовериться, что XML в порядке, Но это, вероятно, будет хуже, чем ловля.

3
ответ дан Martin Marconcini 27 November 2019 в 02:27
поделиться

AS, уже, сказал, я скорее поймаю исключение, но использование XmlParserContext, Вы могли попытаться проанализировать "вручную" и прервать любую аномалию; однако, если Вы не анализируете 100 фрагментов XML в секунду, почему, не ловя исключение?

1
ответ дан Martin Marconcini 27 November 2019 в 02:27
поделиться

Мне не удалось заставить работать XmlValidatingReader и ValidationEventHandler. Исключение XmlException по-прежнему создается для неправильно сформированного xml. Я проверил это, просмотрев методы с отражателем.

Мне действительно нужно проверять сотни коротких фрагментов 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 тоже не работал.

Кто-нибудь преуспел с регулярным выражением?

6
ответ дан 27 November 2019 в 02:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: