Литмир - Электронная Библиотека
Содержание  
A
A

    if (continueParsing ==false) {

     goto finished_reading_wanted_data;

    }

    break;

   }

   default: {

    //He страшно, если имеются XML-узлы других типов, но

    //в нашем примере работы с XML-документом мы должны

    //оповестить об этом факте...

    System.Windows.Forms.MessageBox.Show("Встретился непредвиденный XML-тип " + xmlReader.Name);

    break;

   }

   } //Конец оператора Case, используемого для определения текущего

   //типа XML-элeмeнтa, oбpaбaтывaeмoгo анализатором

   //Перейти к следующему узлу

   readSuccess = xmlReader.Read();

  }

  //Если мы оказались в этом месте программы, не покинув

  //XML-дескриптора UserInfo, то с XML-данными, которые

  //мы считываем, что-то не так

  throw new Exception("He найден элемент UserInfo в XML-документе!");

finished_reading_wanted_data:

  //Закрыть файл, поскольку работа с ним закончена!

  xmlReader.Close();

 }

 //--------------------------------------------------------

 //Вспомогательный код, ответственный за принятие решения

 //относительно того, в какое состояние необходимо перейти,

 //когда встречается закрывающий дескриптор

 //--------------------------------------------------------

 private static bool LoadHelper_EndElementEncountered(ref ReadLocation currentReadLocation) {

  switch (currentReadLocation) {

  //Если мы покидаем узел Name, то должны вернуться

  //обратно в узел UserInfo

  case ReadLocation.inName: {

   currentReadLocation = ReadLocation.inUserInfo;

   break;

  }

  //Если мы покидаем узел FirstName, то должны вернуться

  //обратно в узел Name

  case ReadLocation.inFirstName: {

   currentReadLocation = ReadLocation.inName;

   break;

  }

  //Если мы покидаем узел LastName, то должны вернуться

  //обратно в узел Name

  case ReadLocation.inLastName: {

   currentReadLocation = ReadLocation.inName;

   break;

  }

  //Если мы покидаем узел UserID, то должны вернуться

  //обратно в узел UserInfo

  case ReadLocation.inUserID: {

   currentReadLocation = ReadLocation.inUserInfo;

   break;

  }

  //Если мы покидаем узел UserInfo, то мы только что

  //закончили чтение данных в узлах UserID, FirstName

  //и LastName.

  //

  //Можно выйти из цикла, поскольку у нас уже есть вся

  //информация, которую мы хотели получить!

  case ReadLocation.inUserInfo: {

   return false; //Анализ должен быть прекращен

  }

  }

  return true; //Продолжить анализ

 }

 private static void LoadHelper_NewElementEncountered(string nodeName,ref ReadLocation currentReadLocation) {

  //------------------------------------------------------

  //Мы вошли в новый элемент!

  //

  //B какое состояние переход возможен, зависит от того, в

  //каком состоянии мы находимся в данный момент

  //------------------------------------------------------

  switch (currentReadLocation) {

  //Если мы находимся в узле AllMyData, то переход возможен

  //в узлы, которые указаны ниже

  case (ReadLocation.inAllMyData): {

   if (nodeName == XMI_USERINFO_TAG) {

    currentReadLocation = ReadLocation.inUserInfo;

   }

   break;

  }

  //Если мы находимся в узле UserInfo, то переход возможен

  //в узлы, которые указаны ниже

  case (ReadLocation.inUserInfo): {

   if (nodeName == XML_USERID_TAG) {

    currentReadLocation = ReadLocation.inUserID;

   } else if (nodeName == XML_NAMEINFO_TAG) {

    currentReadLocation = ReadLocation.inName;

   }

   break;

  }

  //Если мы находимся в узле Name, то переход возможен

  //в узлы, которые указаны ниже

99
{"b":"947732","o":1}