Поделиться через


Чтение XML-данных из файла с помощью Visual C++

В этой статье показано, как использовать XmlTextReader класс для чтения XML-данных из файла.

Исходная версия продукта: Visual C++
Исходный номер базы знаний: 815658

Итоги

В этой статье описывается, как использовать XmlTextReader класс для чтения XML-данных из файла. Класс XmlTextReader предоставляет прямой анализ и маркеризацию XML-данных. Класс XmlTextReader также реализует спецификацию XML 1.0 в дополнение к пространствам имен в спецификации XML, определенной консорциумом W3C. В этой статье описывается, как быстро выполнять доступ к XML-данным, а не использовать объектную модель, например объектную модель XML-документа (DOM).

Сведения о версии .NET для Microsoft Visual C# см. в статье о том, как считывать XML из файла с помощью Visual C#.

В этой статье приведено следующее пространство имен библиотеки классов Microsoft платформа .NET Framework:System.xml

Требования

В этой статье предполагается, что вы знакомы со следующими разделами:

  • Терминология XML
  • Создание и чтение XML-файла

В следующем списке описаны рекомендуемые аппаратные средства, программное обеспечение, сетевая инфраструктура и пакеты обновления.

  • Microsoft Visual Studio .NET
  • Microsoft Visual Studio 2005

Чтение XML-данных из файла

В примере в этой статье используется файл с именем Books.xml. Вы можете создать собственный файл Books.xml или использовать пример файла, который входит в краткие руководства по microsoft .NET Software Development Kit (SDK). Необходимо скопировать файл Books.xml в папку проекта.

Чтобы считывать XML-данные из файла, выполните следующие действия.

  1. Запустите Visual Studio .NET 2002, Visual Studio .NET 2003 или Visual Studio 2005.

  2. В меню Файл выберите пункт Создать и затем пункт Проект.

    Откроется диалоговое окно Создание проекта .

  3. В разделе "Типы проектов" щелкните "Проекты Visual C++".

    Примечание.

    В Visual Studio 2005 проекты Visual C++ изменяются на Visual C++.

  4. В разделе "Шаблоны" щелкните управляемое приложение C++ при использовании Visual Studio .NET 2002.

    В разделе "Шаблоны" щелкните консольное приложение (.NET), если вы используете Visual Studio .NET 2003.

    В разделе "Шаблоны" щелкните консольное приложение CLR, если вы используете Visual Studio 2005.

  5. В поле "Имя" введите Q815658 и нажмите кнопку "ОК".

  6. Добавьте ссылку System.xml.dll на проект. Дополнительные сведения о добавлении ссылок на управляемый проект Visual C++ см. в статье "Добавление ссылок на управляемый проект Visual C++"

  7. Укажите директиву using в System::Xml пространстве имен следующим образом:

    using namespace System::Xml;
    

    Это делается так, что вам не нужно квалифицировать XmlTextReader объявления классов позже в коде. Перед любыми другими объявлениями необходимо использовать директиву using.

  8. Создайте экземпляр XmlTextReader объекта. XmlTextReader Заполните объект файлом .xml.

    Как правило, класс используется, XmlTextReader если требуется получить доступ к необработанным XML-данным без затрат на DOM. Таким образом, XmlTextReader класс обеспечивает более быстрый способ чтения XML-данных. Класс XmlTextReader отличается constructors от расположения XML-данных.

    Следующий код создает экземпляр XmlTextReader класса, а затем загружает файл Books.xml . Добавьте в функцию _tmain следующий код:

    XmlTextReader* reader = new XmlTextReader ("books.xml");
    

    Примечание.

    В Visual C++ 2005 _tmain функция изменяется на главную функцию.

  9. Считывает xml-данные.

    Примечание.

    На этом шаге демонстрируется внешний цикл во время выполнения. Два шага, описанные на этом шаге, демонстрируют, как использовать цикл во время чтения XML-данных.

    После создания XmlTextReader объекта используйте метод Read для чтения XML-данных.

    Метод Read продолжает последовательно перемещаться через файл .xml, пока метод Read не достигнет конца файла. Когда метод Read достигает конца файла, метод Read возвращает значение false.

    while (reader->Read())
    {
        // Do some work here on the data.
        Console::WriteLine(reader->Name);
    }
    
  10. Проверьте узлы.

    Для обработки XML-данных каждая запись имеет тип узла, который можно определить из NodeType свойства. Свойство Name и Value свойство возвращают следующие сведения для текущего узла или текущей записи:

    • Имя узла, которое является именем элемента и именем атрибута.
    • Значение узла, которое является текстом узла.

    Перечисление NodeType определяет тип узла. В следующем примере кода отображается имя элементов и тип документа. Следующий пример кода игнорирует атрибуты элемента:

    while (reader->Read())
    {
        switch (reader->NodeType)
        {
            case XmlNodeType::Element: // The node is an element.
                Console::Write("<{0}", reader->Name);
                Console::WriteLine(">");
                break;
            case XmlNodeType::Text: //Display the text in each element.
                Console::WriteLine (reader->Value);
                break;
            case XmlNodeType::EndElement: //Display the end of the element.
                Console::Write("</{0}", reader->Name);
                Console::WriteLine(">");
                break;
        }
    }
    
  11. Проверьте атрибуты.

    Типы узлов элементов могут содержать список узлов атрибутов, связанных с типами узлов элементов. Метод MovetoNextAttribute последовательно перемещается по каждому атрибуту элемента. HasAttributes Используйте свойство, чтобы проверить, имеет ли узел какие-либо атрибуты. Свойство AttributeCount возвращает количество атрибутов для текущего узла.

    while (reader->Read())
    {
        switch (reader->NodeType)
        {
            case XmlNodeType::Element: // The node is an element.
                Console::Write("<{0}", reader->Name);
    
                while (reader->MoveToNextAttribute()) // Read the attributes.
                    Console::Write(" {0}='{1}'", reader->Name, reader->Value);
                Console::WriteLine(">");
                break;
            case XmlNodeType::Text: //Display the text in each element.
                Console::WriteLine (reader->Value);
                break;
            case XmlNodeType::EndElement: //Display the end of the element.
                Console::Write("</{0}", reader->Name);
                Console::WriteLine(">");
                break;
        }
    }
    
  12. Сохраните решение. Постройте решение.

  13. Нажмите клавиши CTRL+F5, чтобы запустить пример приложения.

Просмотр полного описания кода в Visual Studio .NET 2002 или Visual Studio .NET 2003

#include "stdafx.h"
#include <tchar.h>

#using <mscorlib.dll>
#using <System.xml.dll>

using namespace System;
using namespace System::Xml;

void _tmain(void)
{
    XmlTextReader* reader = new XmlTextReader ("books.xml");

    while (reader->Read())
    {
        switch (reader->NodeType)
        {
            case XmlNodeType::Element: // The node is an element.
                Console::Write("<{0}", reader->Name);
  
                while (reader->MoveToNextAttribute()) // Read the attributes.
                    Console::Write(" {0}='{1}'", reader->Name, reader->Value);
                Console::WriteLine(">");
                break;
            case XmlNodeType::Text: //Display the text in each element.
                Console::WriteLine (reader->Value);
                break;
            case XmlNodeType::EndElement: //Display the end of the element.
                Console::Write("</{0}", reader->Name);
                Console::WriteLine(">");
                break;
        }
    }
    Console::ReadLine();
}

Примечание.

Чтобы успешно скомпилировать предыдущий пример кода, необходимо добавить параметр компилятора среды CLR (/clr:oldSyntax) в Visual C++ 2005. Чтобы добавить параметр компилятора среды CLR в Visual C++ 2005, выполните следующие действия:

  1. Щелкните "Проект" и выберите <"Свойства ProjectName> ".

    Примечание.

    <> Имя проекта — это заполнитель для имени проекта.

  2. Разверните свойства конфигурации и нажмите кнопку "Общие".

  3. Щелкните, чтобы выбрать поддержку среды CLR, старый синтаксис (/clr:oldSyntax) в параметре проекта поддержки common Language Runtime в правой области, нажмите кнопку "Применить" и нажмите кнопку "ОК".

    Дополнительные сведения о параметре компилятора поддержки среды CLR см. в разделе /clr (компиляция среды CLR).

Эти действия применяются ко всей статье.

Просмотр выходных данных образца

<bookstore>
    <book genre='autobiography' publicationdate='1981' ISBN='1-861003-11-0'>
        <title>
        The Autobiography of Benjamin Franklin
        </title>
        <author>
            <first-name>
            Benjamin
            </first-name>
            <last-name>
            Franklin
            </last-name>
        </author>
        <price>
        8.99
        </price>
    </book>
    <book genre='novel' publicationdate='1967' ISBN='0-201-63361-2'>
        <title>
        The Confidence Man
        </title>
        <author>
            <first-name>
            Herman
            </first-name>
            <last-name>
            Melville
            </last-name>
        </author>
        <price>
        11.99
        </price>
    </book>
    <book genre='philosophy' publicationdate='1991' ISBN='1-861001-57-6'>
        <title>
        The Gorgias
        </title>
        <author>
            <name>
            Plato
            </name>
        </author>
        <price>
        9.99
        </price>
    </book>
</bookstore>

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

При запуске примера приложения может появиться следующее сообщение об ошибке:

Необработанное исключение типа System.Xml.XmlException произошло в System.xml.dll дополнительные сведения: системная ошибка.

Ссылки

Дополнительные сведения о чтении XML с помощью XmlReader см. в разделе "Чтение XML" с помощью XmlReader.