чтение XML-файла в программе на C++

Я пытаюсь прочитать XML-файл в моей программе на C++. XML-файл выглядит примерно так:

<?xml version="1.0" encoding="utf-8"?>
<myprogram>
<configuration>
<window>
<height> 300 </height>
<width> 500 </width>
</window>
</configuration>
</myprogram>

прямо сейчас я могу посмотреть на XML-файл и попытаться прочитать его так:

ifstream in("mydata.xml");

//ignore the <?xml line
in.ignore(200, 'n');

//i know that the first value i want is the window height so i can ignore <myprogram> <configuration> and <window>

//ignore <myprogram>
in.ignore(200, 'n');

//ignore <configuration>
in.ignore(200, 'n');

//ignore <window>
in.ignore(200, 'n');

string s; int height;

//okay, now i have my height
in >> s >> height;

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

есть ли лучший способ этого?

5 ответов


вы можете использовать некоторую библиотеку, которая сделает это за вас. Если вы работаете на платформе Windows, вы можете использовать MSXML который уже является частью системы.

проверить этот вопрос: чтение записи XML-файла в C++

другие популярные библиотеки: xerces, tinyxml, rapidxml


boost дерево свойств работает очень хорошо с xml, я бы использовал это.


вам понадобится синтаксический анализатор XML. Есть куча там:

  • TinyXML
  • pugiXML
  • поко поставляется с синтаксическим анализатором XML (и многое другое), а также
  • QtXml только когда вы уже используете Qt

мой личный фаворит pugiXML, но это вопрос личных предпочтений.


вы можете использовать библиотеку POCO, которая имеет функции для разбора XML


в мультиплатформенном источнике я обычно использую Qt XML reader.

У вас есть 3 способа читать:

  1. Qt core QXmlStreamReader - Qt способ чтения XML
  2. SAX2 читатель - стандартный читатель SAX2 с содержание обращения класс
  3. DOM reader - DOM чтения документов с узлами XML

Если вы пишете только программное обеспечение Windows, вы должны использовать MSXML 6. Начиная с Windows XP Пакет обновления 3 MSXML 6.0 является частью ОС.

в Linux вы должны использовать библиотеки libxml2.