В этой статье мы собираемся обсудить, как анализировать XML на языке программирования C ++. Мы увидим несколько рабочих примеров, чтобы понять механизм синтаксического анализа XML в C ++.
Что такое XML?
XML - это язык разметки, который в основном используется для хранения и передачи данных в организованном порядке. XML означает расширяемый язык разметки. Он очень похож на HTML. XML полностью ориентирован на хранение и передачу данных, тогда как HTML используется для отображения данных в браузере.
Пример XML-файла / XML-синтаксиса
Вот пример XML-файла:
версиязнак равно'1.0' кодированиезнак равно'utf-8'?>
>
В отличие от HTML, это язык разметки, ориентированный на теги, и мы можем определить свой собственный тег в файле XML. В приведенном выше примере у нас есть несколько пользовательских тегов, таких как. У каждого тега будет соответствующий конечный тег. - это конечный тег для. Мы можем определить столько пользовательских тегов, сколько захотим, чтобы систематизировать данные.
Разбор библиотек в C ++:
Существуют различные библиотеки для анализа XML-данных на большинстве языков программирования высокого уровня. C ++ не исключение. Вот самые популярные библиотеки C ++ для анализа XML-данных:
- RapidXML
- PugiXML
- TinyXML
Как следует из названия, RapidXML в основном ориентирован на скорость и представляет собой библиотеку синтаксического анализа в стиле DOM. PugiXML поддерживает преобразование Unicode. Вы можете использовать PugiXML, если хотите преобразовать документ UTF-16 в UTF-8. TinyXML - это минимальная версия для анализа XML-данных, которая не такая быстрая по сравнению с двумя предыдущими. Если вы хотите просто выполнить свою работу и не заботитесь о скорости, вы можете выбрать TinyXML.
Примеры
Теперь у нас есть базовое понимание XML и библиотек синтаксического анализа XML в C ++. Давайте теперь рассмотрим несколько примеров для синтаксического анализа XML-файла на C ++:
- Пример-1: синтаксический анализ XML в C ++ с использованием RapidXML
- Пример-2: синтаксический анализ XML в C ++ с использованием PugiXML
- Пример-3: синтаксический анализ XML в C ++ с использованием TinyXML
В каждом из этих примеров мы будем использовать соответствующие библиотеки для анализа образца XML-файла.
Пример-1: синтаксический анализ XML в C ++ с использованием RapidXML
В этом примере программы мы продемонстрируем, как анализировать xml с помощью библиотеки RapidXML на C ++. Вот входной XML-файл (sample.xml):
версиязнак равно'1.0' кодированиезнак равно'utf-8'?>>
Наша цель здесь - проанализировать указанный выше XML-файл с помощью C ++. Вот программа на C ++ для анализа XML-данных с помощью RapidXML. Вы можете скачать библиотеку RapidXML из Здесь .
#включают#включают
#включают
#include 'rapidxml.hpp'
с использованием пространство именчасы;
с использованием пространство именRapidxml;
xml_documentдок
xml_node *root_nodeзнак равно НУЛЕВОЙ;
intглавный(пустота)
{
Стоимость << ' пАнализ данных моих студентов (sample.xml) ... ' <<конец;
// Читаем файл sample.xml
ifstream theFile('sample.xml');
вектор<символ>буфер((istreambuf_iterator<символ>(файл)), istreambuf_iterator<символ>());
буфер.отталкивать(' 0');
// Разбираем буфер
док.разбирать<0>(&буфер[0]);
// Узнаем корневой узел
root_nodeзнак равнодок.first_node('MyStudentsData');
// Перебираем узлы учеников
для (xml_node *student_nodeзнак равноroot_node->first_node('Ученик');student_node;student_nodeзнак равноstudent_node->next_sibling())
{
Стоимость << ' пТип студента = ' <<student_node->first_attribute('student_type')->ценить();
Стоимость <<конец;
// Взаимодействовать с именами учеников
для(xml_node *student_name_nodeзнак равноstudent_node->first_node('Имя');student_name_node;student_name_nodeзнак равноstudent_name_node->next_sibling())
{
Стоимость << 'Имя студента =' <<student_name_node->ценить();
Стоимость <<конец;
}
Стоимость <<конец;
}
возвращение 0;
}
Пример-2: синтаксический анализ XML в C ++ с использованием PugiXML
В этом примере программы мы продемонстрируем, как анализировать xml с помощью библиотеки PugiXML на C ++. Вот входной XML-файл (sample.xml):
версиязнак равно'1.0' кодированиезнак равно'UTF-8' автономныйзнак равно'нет' ?>>
В этом примере программы мы продемонстрируем, как анализировать xml с помощью библиотеки pugixml на C ++. Вы можете скачать библиотеку PugiXML из Здесь .
#включают#include 'pugixml.hpp'
с использованием пространство именчасы;
с использованием пространство именпуги;
intглавный()
{
Стоимость << ' пАнализ данных сотрудников (sample.xml) ..... п п';
xml_document doc;
// загружаем XML файл
если (!док.load_file('sample.xml')) возвращение -1;
инструменты xml_nodeзнак равнодок.ребенок('EmployeesData').ребенок('Сотрудники');
для (xml_node_iterator этознак равноинструменты.начинать();Это!знак равноинструменты.конец(); ++Это)
{
Стоимость << 'Сотрудники:';
для (xml_attribute_iterator aitзнак равноЭто->attribute_begin();принадлежность!знак равноЭто->attribute_end(); ++принадлежность)
{
Стоимость << '' <<принадлежность->имя() << знак равно <<принадлежность->ценить();
}
Стоимость <<конец;
}
Стоимость <<конец;
возвращение 0;
}
Пример-3: синтаксический анализ XML в C ++ с использованием TinyXML
В этом примере программы мы продемонстрируем, как анализировать xml с помощью библиотеки TinyXML на C ++. Вот входной XML-файл (sample.xml):
версиязнак равно'1.0' кодированиезнак равно'utf-8'?>>
В этом примере программы мы продемонстрируем, как анализировать xml с помощью библиотеки TinyXML на C ++. Вы можете скачать библиотеку TinyXML из Здесь .
#включают#включают
#включают
#include 'tinyxml2.cpp'
с использованием пространство именчасы;
с использованием пространство именtinyxml2;
intглавный(пустота)
{
Стоимость << ' пАнализ данных моих студентов (sample.xml) ... ' <<конец;
// Читаем файл sample.xml
XMLDocument doc;
док.LoadFile( 'sample.xml' );
const символ*заглавиезнак равнодок.FirstChildElement( 'MyStudentsData' )->FirstChildElement( 'Ученик' )->GetText();
printf( 'Имя студента:% s п', заглавие);
XMLText*textNodeзнак равнодок.LastChildElement( 'MyStudentsData' )->LastChildElement( 'Ученик' )->Первый ребенок()->Печатать();
заглавиезнак равноtextNode->Ценить();
printf( 'Имя студента:% s п', заглавие);
возвращение 0;
}
Заключение
В этой статье мы кратко обсудили XML и рассмотрел три различных примера того, как анализировать XML в C ++. TinyXML - это минималистичная библиотека для анализа XML-данных. Большинство программистов в основном используют RapidXML или PugiXML для анализа XML-данных.