Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этой статье показано, как использовать 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-данные из файла, выполните следующие действия.
Запустите Visual Studio .NET 2002, Visual Studio .NET 2003 или Visual Studio 2005.
В меню Файл выберите пункт Создать и затем пункт Проект.
Откроется диалоговое окно Создание проекта .
В разделе "Типы проектов" щелкните "Проекты Visual C++".
Примечание.
В Visual Studio 2005 проекты Visual C++ изменяются на Visual C++.
В разделе "Шаблоны" щелкните управляемое приложение C++ при использовании Visual Studio .NET 2002.
В разделе "Шаблоны" щелкните консольное приложение (.NET), если вы используете Visual Studio .NET 2003.
В разделе "Шаблоны" щелкните консольное приложение CLR, если вы используете Visual Studio 2005.
В поле "Имя" введите Q815658 и нажмите кнопку "ОК".
Добавьте ссылку
System.xml.dllна проект. Дополнительные сведения о добавлении ссылок на управляемый проект Visual C++ см. в статье "Добавление ссылок на управляемый проект Visual C++"Укажите директиву using в
System::Xmlпространстве имен следующим образом:using namespace System::Xml;Это делается так, что вам не нужно квалифицировать
XmlTextReaderобъявления классов позже в коде. Перед любыми другими объявлениями необходимо использовать директиву using.Создайте экземпляр
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функция изменяется на главную функцию.Считывает 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); }Проверьте узлы.
Для обработки 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; } }Проверьте атрибуты.
Типы узлов элементов могут содержать список узлов атрибутов, связанных с типами узлов элементов. Метод
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; } }Сохраните решение. Постройте решение.
Нажмите клавиши 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, выполните следующие действия:
Щелкните "Проект" и выберите <"Свойства ProjectName> ".
Примечание.
<> Имя проекта — это заполнитель для имени проекта.
Разверните свойства конфигурации и нажмите кнопку "Общие".
Щелкните, чтобы выбрать поддержку среды 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.