C ++

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

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

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

Что такое XML?

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

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

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




Том


Дрейк

В отличие от 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 ++:

В каждом из этих примеров мы будем использовать соответствующие библиотеки для анализа образца XML-файла.

Пример-1: синтаксический анализ XML в C ++ с использованием RapidXML

В этом примере программы мы продемонстрируем, как анализировать xml с помощью библиотеки RapidXML на C++. Вот входной XML-файл (образец.xml):




Джон


Шон


Сара

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

#включать
#включать
#включать
#include "rapidxml".hpp "
используя пространство имен std;
с использованием пространства имен rapidxml;
xml_document <> документ
xml_node <> * root_node = NULL;
int main (пусто)

cout << "\nParsing my students data (sample.xml)… " << endl;
// Читаем образец.xml файл
ifstream theFile ("образец.xml ");
вектор буфер ((istreambuf_iterator(файл)), istreambuf_iterator());
буфер.push_back ('\ 0');
// Разбираем буфер
док.разбирать<0>(& буфер [0]);
// Узнаем корневой узел
root_node = документ.first_node ("MyStudentsData");
// Перебираем узлы учеников
для (xml_node <> * student_node = root_node-> first_node ("Student"); student_node; student_node = student_node-> next_sibling ())

cout << "\nStudent Type =   " << student_node->первый_атрибут ("тип_студента") -> значение ();
cout << endl;
// Взаимодействовать с именами учеников
для (xml_node <> * student_name_node = student_node-> first_node ("Имя"); student_name_node; student_name_node = student_name_node-> next_sibling ())

cout << "Student Name =   " << student_name_node->значение();
cout << endl;

cout << endl;

возврат 0;

Пример-2: синтаксический анализ XML в C ++ с использованием PugiXML

В этом примере программы мы продемонстрируем, как анализировать xml с помощью библиотеки PugiXML на C++. Вот входной XML-файл (образец.xml):











В этом примере программы мы продемонстрируем, как анализировать xml с помощью библиотеки pugixml на C++. Вы можете скачать библиотеку PugiXML отсюда.

#включать
#include "pugixml.hpp "
используя пространство имен std;
используя пространство имен pugi;
int main ()

cout << "\nParsing employees data (sample.xml)… \n\n";
xml_document doc;
// загружаем XML файл
если (!док.load_file ("образец.xml ")) return -1;
xml_node tools = документ.ребенок ("EmployeesData").child («Сотрудники»);
для (xml_node_iterator it = tools.начинать(); Это != инструменты.конец(); ++ это)

cout << "Employees:";
для (xml_attribute_iterator ait = it-> attributes_begin (); ait != это-> attributes_end (); ++ айт)

cout << " " << ait->название() << "=" << ait->значение();

cout << endl;

cout << endl;
возврат 0;

Пример-3: синтаксический анализ XML в C ++ с использованием TinyXML

В этом примере программы мы продемонстрируем, как анализировать xml с помощью библиотеки TinyXML на C++. Вот входной XML-файл (образец.xml):



Джон
Шон
Сара

В этом примере программы мы продемонстрируем, как анализировать xml с помощью библиотеки TinyXML на C++. Вы можете скачать библиотеку TinyXML отсюда.

#включать
#включать
#включать
#include "tinyxml2".cpp "
используя пространство имен std;
используя пространство имен tinyxml2;
int main (пусто)

cout << "\nParsing my students data (sample.xml)… " << endl;
// Читаем образец.xml файл
XMLDocument doc;
док.LoadFile ("образец.xml ");
const char * title = doc.FirstChildElement ("MyStudentsData") -> FirstChildElement ("Студент") -> GetText ();
printf ("Имя ученика:% s \ n", название);
XMLText * textNode = документ.LastChildElement ("MyStudentsData") -> LastChildElement ("Student") -> FirstChild () -> ToText ();
title = textNode-> Значение ();
printf ("Имя ученика:% s \ n", название);
возврат 0;

Заключение

В этой статье мы кратко обсудили XML и рассмотрели три различных примера того, как анализировать XML в C++. TinyXML - минималистичная библиотека для анализа XML-данных.  Большинство программистов в основном используют RapidXML или PugiXML для анализа XML-данных.

Как записать и транслировать игровую сессию в Linux
В прошлом игры считались только хобби, но со временем игровая индустрия увидела огромный рост с точки зрения технологий и количества игроков. Игровая ...
Лучшие игры с отслеживанием рук
Oculus Quest недавно представил отличную идею отслеживания рук без контроллеров. С постоянно растущим числом игр и действий, которые осуществляются фо...
Как показать наложение OSD в полноэкранных приложениях и играх Linux
Игра в полноэкранные игры или использование приложений в полноэкранном режиме без отвлекающих факторов может отрезать вас от соответствующей системной...