Как разбирать XML в C ++

How Parse Xml C



В этой статье мы собираемся обсудить, как анализировать XML на языке программирования C ++. Мы увидим несколько рабочих примеров, чтобы понять механизм синтаксического анализа XML в C ++.

Что такое XML?

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







Пример XML-файла / XML-синтаксиса

Вот пример XML-файла:



версиязнак равно'1.0' кодированиезнак равно'utf-8'?>

>

student_typeзнак равно'Неполная занятость'>

>Том>

>

student_typeзнак равно'На постоянной основе'>

>Дрейк>

>

>

В отличие от HTML, это язык разметки, ориентированный на теги, и мы можем определить свой собственный тег в файле XML. В приведенном выше примере у нас есть несколько пользовательских тегов, таких как. У каждого тега будет соответствующий конечный тег. - это конечный тег для. Мы можем определить столько пользовательских тегов, сколько захотим, чтобы систематизировать данные.



Разбор библиотек в C ++:

Существуют различные библиотеки для анализа XML-данных на большинстве языков программирования высокого уровня. C ++ не исключение. Вот самые популярные библиотеки C ++ для анализа XML-данных:





  1. RapidXML
  2. PugiXML
  3. 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'?>

>

student_typeзнак равно'Неполная занятость'>

>Джон>

>

student_typeзнак равно'На постоянной основе'>

>Шон>

>

student_typeзнак равно'Неполная занятость'>

>Сара>

>

>

Наша цель здесь - проанализировать указанный выше 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' автономныйзнак равно'нет' ?>

FormatVersionзнак равно'1'>

>

Имязнак равно'Джон' Типзнак равно'Неполная занятость'>

>

Имязнак равно'Шон' Типзнак равно'На постоянной основе'>

>

Имязнак равно'Сара' Типзнак равно'Неполная занятость'>

>

>

>

В этом примере программы мы продемонстрируем, как анализировать 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-данных.