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

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

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

Заключение

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

Сведения о версии microsoft Visual C# .NET в этой статье см. в статье "Чтение XML-кода из файла с помощью Visual C#".

Эта статья относится к следующему пространству имен платформа .NET Framework классов Майкрософт:System.xml

Требования

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

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

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

  • Microsoft Visual Studio .NET
  • Microsoft Visual Studio 2005

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

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

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

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

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

    Открывается диалоговое окно Новый проект.

  3. В Project "Типы" щелкните "Проекты 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-данных.

    Примечание

    На этом шаге демонстрируется внешний цикл while . Два шага, которые следует выполнить на этом шаге, демонстрируют, как использовать цикл while для чтения 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, чтобы запустить пример приложения.

Просмотрите полный список кода в .NET 2002 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. Щелкните Project и нажмите кнопку "<ProjectName> Свойства".

    Примечание

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

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

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

    Дополнительные сведения о параметре компилятора поддержки среды 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".