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

Как разобрать XML в C++ Программирование и разработка

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

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

Что такое XML?

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

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

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

<?xml version=«1.0» encoding=«utf-8»?>

<EmployeeData>

<Employee student_type=«Part-time»>

<Name>Tom</Name>

</Employee>

<Employee student_type=«Full-time»>

<Name>Drake</Name>

</Employee>

</EmployeeData>

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

<?xml version=«1.0» encoding=«utf-8»?>

<MyStudentsData>

<Student student_type=«Part-time»>

<Name>John</Name>

</Student>

<Student student_type=«Full-time»>

<Name>Sean</Name>

</Student>

<Student student_type=«Part-time»>

<Name>Sarah</Name>

</Student>

</MyStudentsData>

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

#include <iostream>
#include <fstream>
#include <vector>
#include «rapidxml.hpp»using namespace std;
using namespace rapidxml;xml_document<> doc
xml_node<> * root_node = NULL;

int main(void)
{
cout << «\nParsing my students data (sample.xml)…..» << endl;

// Read the sample.xml file
ifstream theFile («sample.xml»);
vector<char> buffer((istreambuf_iterator<char>(theFile)), istreambuf_iterator<char>());
buffer.push_back(\0);

// Parse the buffer
doc.parse<0>(&buffer[0]);

// Find out the root node
root_node = doc.first_node(«MyStudentsData»);

// Iterate over the student nodes
for (xml_node<> * student_node = root_node>first_node(«Student»); student_node; student_node = student_node>next_sibling())
{
cout << «\nStudent Type =   « << student_node>first_attribute(«student_type»)>value();
cout << endl;

// Interate over the Student Names
for(xml_node<> * student_name_node = student_node>first_node(«Name»); student_name_node; student_name_node = student_name_node>next_sibling())
{
cout << «Student Name =   « << student_name_node>value();
cout << endl;
}
cout << endl;
}

return 0;
}

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

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

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

<?xml version=«1.0» encoding=«UTF-8» standalone=«no» ?>

<EmployeesData FormatVersion=«1»>

<Employees>

<Employee Name=«John» Type=«Part-Time»>

</Employee>

<Employee Name=«Sean» Type=«Full-Time»>

</Employee>

<Employee Name=«Sarah» Type=«Part-Time»>

</Employee>

</Employees>

</EmployeesData>

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

#include <iostream>
#include «pugixml.hpp»

using namespace std;
using namespace pugi;

int main()
{
cout << «\nParsing employees data (sample.xml)…..\n\n«;

xml_document doc;

// load the XML file
if (!doc.load_file(«sample.xml»)) return 1;

xml_node tools = doc.child(«EmployeesData»).child(«Employees»);

for (xml_node_iterator it = tools.begin(); it != tools.end(); ++it)
{
cout << «Employees:»;

for (xml_attribute_iterator ait = it>attributes_begin(); ait != it>attributes_end(); ++ait)
{
cout << » « << ait>name() << «=» << ait>value();
}

cout << endl;
}

cout << endl;

return 0;

}

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

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

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

<?xml version=«1.0» encoding=«utf-8»?>

<MyStudentsData>

<Student> John </Student>

<Student> Sean </Student>

<Student> Sarah </Student>

</MyStudentsData>

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

#include <iostream>
#include <fstream>
#include <vector>
#include «tinyxml2.cpp»

using namespace std;
using namespace tinyxml2;

int main(void)
{
cout << «\nParsing my students data (sample.xml)…..» << endl;

// Read the sample.xml file
XMLDocument doc;
doc.LoadFile( «sample.xml» );

const char* title = doc.FirstChildElement( «MyStudentsData» )>FirstChildElement( «Student» )>GetText();
printf( «Student Name: %s\n«, title );

XMLText* textNode = doc.LastChildElement( «MyStudentsData» )>LastChildElement( «Student» )>FirstChild()>ToText();
title = textNode>Value();
printf( «Student Name: %s\n«, title );

return 0;
}

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

Заключение

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

Читайте также:  JSON-парсер JavaScript
Оцените статью
bestprogrammer.ru
Добавить комментарий

  1. masortim

    Как же, всё-таки, небрежно набран код — ничего не работает.

    Ответить