Как да анализираме XML в C ++

How Parse Xml C



В тази статия ще обсъдим как да анализираме XML в езика за програмиране на C ++. Ще видим няколко работещи примера за разбиране на механизма за синтактичен анализ на XML в C ++.

Какво е XML?

XML е език за маркиране и се използва главно за съхранение и прехвърляне на данни по организиран начин. XML означава eXtensible Markup Language. Той е много подобен на HTML. XML е изцяло фокусиран върху съхранението и прехвърлянето на данните, докато HTML се използва за показване на данните в браузъра.







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

Ето примерен XML файл:



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

>

студент_тип=„Непълно работно време“>

>Том>

>

студент_тип='Пълен работен ден'>

>Дрейк>

>

>

За разлика от HTML, това е език за маркиране, ориентиран към маркери, и можем да дефинираме наш собствен маркер в XML файл. В горния пример имаме няколко дефинирани от потребителя тагове като например. Всеки маркер ще има съответния краен маркер. е крайният маркер за. Можем да дефинираме толкова дефинирани от потребителя тагове, колкото искаме да организираме данните.



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

Има различни библиотеки за анализиране на XML данни в повечето от езиците за програмиране на високо ниво. C ++ не е изключение. Ето най -популярните C ++ библиотеки за анализ на XML данни:





  1. RapidXML
  2. PugiXML
  3. TinyXML

Както подсказва името, RapidXML е фокусиран главно върху скоростта и е библиотека за анализ на DOM стил. PugiXML поддържа преобразуване на Unicode. Може да искате да използвате PugiXML, ако искате да конвертирате UTF-16 doc в 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) ..... ' <<endl;

// Прочетете файла sample.xml
ifstream на файла('sample.xml');
вектор<char>буфер((istreambuf_iterator<char>(файлът)), istreambuf_iterator<char>());
буфер.избутвам(' 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')->стойност();
цена <<endl;

// Интерес върху имената на учениците
за(xml_node *студент_име_узел=student_node->first_node('Име');студент_име_узел;студент_име_узел=студент_име_узел->next_sibling())
{
цена << „Име на студент =“ <<студент_име_узел->стойност();
цена <<endl;
}
цена <<endl;
}

връщане 0;
}

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

В тази примерна програма ще демонстрираме как да анализираме xml с помощта на библиотеката PugiXML в C ++. Ето входния XML файл (sample.xml):

версия='1.0' кодиране=„UTF-8“ самостоятелен='не' ?>

FormatVersion='1'>

>

Име='Джон' Тип=„Непълно работно време“>

>

Име='Шон' Тип='Пълен работен ден'>

>

Име='Сара' Тип=„Непълно работно време“>

>

>

>

В тази примерна програма ще демонстрираме как да анализираме xml, използвайки библиотеката pugixml в C ++. Можете да изтеглите библиотеката PugiXML от Тук .

#включва
#include 'pugixml.hpp'

използвайки пространство на именатачаса;
използвайки пространство на именатаpugi;

intглавен()
{
цена << 'нАнализиране на данни за служителите (sample.xml) .....нн';


xml_document doc;

// зареждаме XML файла
ако (!док.load_file('sample.xml')) връщане -1;

xml_node инструменти=док.дете(„Данни за служителите“).дете(„Служители“);


за (xml_node_iterator го=инструменти.започнете();то!=инструменти.край(); ++то)
{
цена << „Служители:“;

за (xml_attribute_iterator ait=то->attributes_begin();принадлежност!=то->attributes_end(); ++принадлежност)
{
цена << '' <<принадлежност->име() << '=' <<принадлежност->стойност();
}

цена <<endl;
}

цена <<endl;

връщане 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) ..... ' <<endl;

// Прочетете файла sample.xml
XMLDocument doc;
док.LoadFile( 'sample.xml' );

const char*заглавие=док.FirstChildElement( „MyStudentsData“ )->FirstChildElement( 'Студент' )->GetText();
printf( „Име на студент: %sн', заглавие);


XMLText*textNode=док.LastChildElement( „MyStudentsData“ )->LastChildElement( 'Студент' )->Първо дете()->ToText();
заглавие=textNode->Стойност();
printf( „Име на студент: %sн', заглавие);


връщане 0;
}

Заключение

В тази статия накратко обсъдихме XML и разгледах три различни примера за това как да се анализира XML в C ++. TinyXML е минималистична библиотека за анализ на XML данни. Повечето програмисти използват главно RapidXML или PugiXML за анализиране на XML данни.