В настоящее время вы работаете в автономном режиме; ожидается повторное подключение к Интернету

Чтение XML из файла с помощью Visual C#

Данная статья была ранее опубликована под номером RU307548
Версия данной статьи для Microsoft Visual Basic .NET: 301225.

Данная статья ссылается на указанное ниже пространство имен библиотеки классов Microsoft .NET Framework.
  • System.Xml
Аннотация
В статье описывается использование класса XmlTextReader для чтения из файла инструкций языка XML (Extensible Markup Language). Класс XmlTextReader обеспечивает прямой синтаксический разбор и выделение инструкций XML и реализует спецификацию XML 1.0, а также пространства имен в спецификации XML консорциума W3C. В данной статье описан быстрый потоковый доступ к XML с использованием маркеров, являющийся альтернативой использованию объектной модели, такой как XML DOM (Document Object Model).

Требования

В приведенном ниже списке перечислены требования к оборудованию, сети, программному обеспечению и пакетам обновления.
  • Microsoft Visual Studio 2005 или Microsoft Visual Studio .NET
При написании статьи предполагалось, что пользователь обладает достаточными знаниями в указанных ниже областях.
  • Терминология XML.
  • Создание и чтение XML-файлов.

Чтение XML из файла.

В данном примере используется файл Books.xml. Можно создать собственный файл Books.xml или воспользоваться файлом, поставляемым с пакетом .NET Software Development Kit (SDK) QuickStarts и расположенным в следующей папке:
\Program Files\Microsoft Visual Studio .NET\FrameworkSDK\Samples\QuickStart\Howto\Samples\Xml\Transformxml\Cs
Файл Books.xml необходимо скопировать в папку \Bin\Debug, которая расположена в папке, где создается данный проект. Файл Books.xml также можно загрузить из Интернета. Ссылка для загрузки приведена в разделе "Ссылки".
  1. Запустите Visual Studio 2005 или Visual Studio .NET.
  2. Создайте консольное приложение Visual C#. Перейдите сразу к разделу "Полный листинг кода" или создайте приложение, последовательно выполняя приведенные ниже действия.
  3. Убедитесь в том, что проект содержит ссылку на сборку System.Xml.dll.
  4. Укажите директиву using в пространстве имен System.Xml, чтобы избавиться от необходимости указывать объявления XmlTextReader далее в коде. Директиву using необходимо использовать перед всеми остальными объявлениями.
    using System.Xml;					
  5. Создайте экземпляр объекта XmlTextReader и заполните его XML-файлом. Класс XmlTextReader обычно используется для доступа к XML как к неформатированным данным без использования надстройки DOM; таким образом, класс XmlTextReader обеспечивает более быстрый механизм чтения XML. Класс XmlTextReader имеет различные конструкторы для указания местоположения XML-данных. В приведенном ниже коде создается экземпляр класса XmlTextReader и загружается файл Books.xml. Добавьте приведенный ниже код в процедуру Main класса Class1.
    XmlTextReader reader = new XmlTextReader ("books.xml");					
  6. Чтение XML. (Отметим, что в данном действии показан внешний цикл "while", а в следующих двух действиях показано использование этого цикла для чтения XML.) После создания объекта XmlTextReader воспользуйтесь для чтения данных XML методом Read. Метод Read последовательно перемещается по XML-файлу до достижения конца файла, после чего возвращает значение "False".
    while (reader.Read())  {    // Обработка данных.	Console.WriteLine(reader.Name);}Console.ReadLine();					
  7. Изучение узлов. Для обработки данных XML в каждой записи содержится узел, тип которого можно определить по свойству NodeType. Свойства Name и Value возвращают имя узла (имена элемента и атрибута) и значение узла (текст узла) текущего узла (или записи). Перечисление NodeType определяет тип узла. В приведенном ниже примере кода выводится имя элементов и тип документа. Имейте в виду, что в данном примере пропущены атрибуты элементов.
    while (reader.Read())  {    switch (reader.NodeType)      {        case XmlNodeType.Element: // Узел является элементом.            Console.Write("<" + reader.Name);   Console.WriteLine(">");            break;  case XmlNodeType.Text: // Вывести текст в каждом элементе.            Console.WriteLine (reader.Value);            break;  case XmlNodeType. EndElement: // Вывести конец элемента.            Console.Write("</" + reader.Name);   Console.WriteLine(">");            break;    }}					
  8. Проверка атрибутов. Типы узлов элементов могут включать списки связанных с ними узлов атрибутов. Метод MovetoNextAttribute последовательно перемещается по всем атрибутам элемента. Свойство HasAttributes используется для проверки наличия у узла атрибутов. Свойство AttributeCount возвращает количество атрибутов для текущего узла.
    while (reader.Read()) {       switch (reader.NodeType)        {           case XmlNodeType.Element: // Узел является элементом.               Console.Write("<" + reader.Name);               while (reader.MoveToNextAttribute()) // Чтение атрибутов.                   Console.Write(" " + reader.Name + "='" + reader.Value + "'");      Console.WriteLine(">");               break;     case XmlNodeType.Text: // Вывести текст в каждом элементе.               Console.WriteLine (reader.Value);               break;     case XmlNodeType. EndElement: // Вывести конец элемента.               Console.Write("</" + reader.Name);      Console.WriteLine(">");               break;       }   }					
  9. Сохраните и закройте проект.

Полный листинг кода

using System;using System.Xml;namespace ReadXMLfromFile{    /// <summary>    /// Общее описание класса Class1.    /// </summary>    class Class1    {        static void Main(string[] args)        {            XmlTextReader reader = new XmlTextReader ("books.xml");            while (reader.Read())              {                switch (reader.NodeType)                  {                    case XmlNodeType.Element: // Узел является элементом.                        Console.Write("<" + reader.Name);                        Console.WriteLine(">");                        break;                    case XmlNodeType.Text: // Вывести текст в каждом элементе.                        Console.WriteLine (reader.Value);                        break;                    case XmlNodeType.EndElement: // Вывести конец элемента.                        Console.Write("</" + reader.Name);                        Console.WriteLine(">");                        break;                }            }            Console.ReadLine();        }    }}				

Пример выходных данных

<bookstore><book><title>Автобиография Бенджамина Франклина</title><author><first-name>Бенджамин</first-name><last-name>Франклин</last-name></author><price>8.99</price></book><book><title>Мошенник</title><author><first-name>Герман</first-name><last-name>Мелвилл</last-name></author><price>11.99</price></book><book><title>Горгий</title><author><name>Платон</name></author><price>9.99</price></book></bookstore>				

Устранение неполадок

Во время тестирования кода может быть выведено сообщение об ошибке, указанное ниже. Необрабатываемое исключение: System.Xml.XmlException: Неуместное объявление XML. Объявление XML должно быть первым узлом в документе, не предваряемым пробелами.

Дополнительные сведения: Системная ошибка. Исключение возникло в следующей строке: While
(reader.Read())
Эта ошибка вызвана неправильной инструкцией обработки. Например, инструкция обработки может содержать лишние пробелы. Ниже приведен пример неправильной инструкции обработки:
<?xml version='1.0' ?>
Этот XML-тег содержит пробел перед скобкой <. Для устранения ошибки удалите пробел.

ССЫЛКИ

Следующий файл доступен для загрузки в центре загрузки Microsoft по адресу:
Дополнительные сведения о классах XML .NET Framework и C# см. на веб-узле MSDN (Microsoft Developer Network) по адресу Дополнительные сведения о классе XmlReader см. на веб-узле MSDN по адресу: Дополнительные сведения о чтении данных XML с помощью класса XmlReader см. на веб-узле MSDN по следующим адресам:
Примечание. Это ЭКСПРЕСС-ПУБЛИКАЦИЯ, подготовленная непосредственно службой технической поддержки Майкрософт . Сведения, содержащиеся в данном документе, предоставлены в качестве отклика на возникшие проблемы. Из-за срочности в материалах могут быть опечатки, и в любое время и без уведомления в них могут быть внесены изменения. Чтобы получить дополнительные сведения, см. Условия использования.
Свойства

Номер статьи: 307548 — последний просмотр: 05/31/2013 13:18:00 — редакция: 1.0

Microsoft Visual C# 2008 Express Edition, Microsoft Visual C# 2005, Microsoft Visual C# .NET 2002 Standard Edition

  • kbdownload kbhowtomaster KB307548
Отзывы и предложения