Чтение XML-данных из файла с помощью Visual C++
В этой статье показано, как использовать XmlTextReader
класс для чтения XML-данных из файла.
Исходная версия продукта: Visual C++
Исходный номер базы знаний: 815658
Сводка
В этой статье описывается использование XmlTextReader
класса для чтения XML-данных из файла. Класс XmlTextReader
обеспечивает прямой синтаксический анализ и токенизацию XML-данных. Класс XmlTextReader
также реализует спецификацию XML 1.0 в дополнение к пространствам имен в спецификации XML, определенной консорциумом W3C. В этой статье описывается, как быстро получить доступ к XML-данным с маркерами, а не использовать объектную модель, например объектную модель xml-документа (DOM).
Сведения о версии Microsoft Visual C# для .NET этой статьи см. в статье Чтение XML из файла с помощью Visual C#.
В этой статье описывается следующее пространство имен библиотеки классов Microsoft платформа .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-данные из файла, выполните следующие действия.
Запустите 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
функция изменяется на функцию main.Чтение 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); }
Проверьте узлы.
Для обработки 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> .
Примечание.
<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.
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по