В тази статия ще обсъдим как да анализираме 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 данни:
- RapidXML
- PugiXML
- 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“ самостоятелен='не' ?>>
В тази примерна програма ще демонстрираме как да анализираме 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 данни.