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

Переводы статьи Переводы статьи
Код статьи: 307548 - Vizualiza?i produsele pentru care se aplic? acest articol.
Данная статья была ранее опубликована под номером RU307548
Развернуть все | Свернуть все

В этой статье

Аннотация

В статье описывается использование класса 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 по адресу:
Свернуть это изображениеРазвернуть это изображение
Загрузка
Загрузить пакет Books.exe.
Дополнительные сведения о классах XML .NET Framework и C# см. на веб-узле MSDN (Microsoft Developer Network) по адресу
http://msdn.microsoft.com/en-us/magazine/cc302158.aspx
Дополнительные сведения о классе XmlReader см. на веб-узле MSDN по адресу:
http://msdn.microsoft.com/ru-ru/library/system.xml.xmlreader(VS.71).aspx
Дополнительные сведения о чтении данных XML с помощью класса XmlReader см. на веб-узле MSDN по следующим адресам:
http://msdn.microsoft.com/ru-ru/library/aa720470(VS.71).aspx

http://msdn.microsoft.com/ru-ru/library/tfz3cz6w(VS.71).aspx
Примечание. Это ЭКСПРЕСС-ПУБЛИКАЦИЯ, подготовленная непосредственно службой технической поддержки Майкрософт . Сведения, содержащиеся в данном документе, предоставлены в качестве отклика на возникшие проблемы. Из-за срочности в материалах могут быть опечатки, и в любое время и без уведомления в них могут быть внесены изменения. Чтобы получить дополнительные сведения, см. Условия использования.

Свойства

Код статьи: 307548 - Последний отзыв: 31 мая 2013 г. - Revision: 1.0
Информация в данной статье относится к следующим продуктам.
  • Microsoft Visual C# 2008 Express Edition
  • Microsoft Visual C# 2005
  • Microsoft Visual C# .NET 2002 Standard Edition
Ключевые слова: 
kbdownload kbhowtomaster KB307548

Отправить отзыв

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com