Добавление поддеревьев с атрибутами xml в дерево свойств boost

Я использую boost::ptree для создания XML-файла

ptree tree;
ptree & subtree = tree.add("sometag", "");
ptree & subsubtree = tree.add("someothertag", "");
...
write_xml(stfilename, declarationTree, std::locale(),
          xml_writer_settings<std::string>(' ', 4));

Это создает следующий файл XML

<sometag>
   <someothertag>
   ...
   </someothertag>
</sometag>

Пока все хорошо, но мне нужно поместить атрибуты xml в <sometag> тег.

Вместо этого:

<sometag>
  ...

Я хочу этот:

<sometag someattribute="somevalue">
  ...

Как можно указать атрибуты? В документации буста об этом очень неясно.

1 ответ

Вы должны использовать <xmlattr> пространство имен специального дочернего узла:

#include <boost/property_tree/xml_parser.hpp>
#include <iostream>

int main() {
    boost::property_tree::ptree tree;
    tree.put("sometag.someothertag.<xmlattr>.someattribute", "somevalue");

    write_xml(std::cout, tree,
            boost::property_tree::xml_writer_settings<std::string>(' ', 4));
}

Печать

<?xml version="1.0" encoding="utf-8"?>
<sometag>
    <someothertag someattribute="somevalue"/>
</sometag>
Другие вопросы по тегам