UPD Я нашел ответ на проблему "форматирования" здесь, поэтому я удалите эту часть вопроса, прочитайте обновленный вопрос:
Мне нужно написать xml в файловую систему на С++. Я изучил этот учебник. В учебнике используется довольно простой xml. Мой xml сложнее, и я не знаю, как изменить код для его создания. Вот что у меня есть код:
#include <boost/property_tree/ptree.hpp>
#include <boost/property_tree/xml_parser.hpp>
//<Root>
// <Set Name="1">
// <Field Name="Hello 1"/>
// <Field Name="World 1"/>
// </Set>
// <Set Name="2">
// <Field Name="Hello 2"/>
// <Field Name="World 2"/>
// </Set>
//</Root>
int main(int argc, char* argv[])
{
using boost::property_tree::ptree;
ptree pt;
pt.put("Root.Set.Field", "Hello");
pt.put("Root.Set.Field", "World");
boost::property_tree::xml_writer_settings<char> settings('\t', 1);
write_xml("testXml.xml", pt, std::locale(), settings);
return 0;
}
Выход:
<?xml version="1.0" encoding="utf-8"?>
<Root>
<Set>
<Field>World</Field>
</Set>
</Root>
Как я могу изменить свою программу для создания желаемого xml, в частности:
- Как добавить несколько узлов с одинаковым именем? Добавление
true
таким образомpt.put("Root.Set.Field", "Hello", true);
является ошибкой времени компиляции - Как установить атрибуты xml? (
Name="Hello 1"
) Согласно документу вроде бы надо добавить их в "подключи", но как?
upd Я пробовал это: pt.put("Root.Set.Field.xmlattr.Name", "Hello 1");
ожидал увидеть это <Field Name="Hello 1"/>
, но все равно не работает. Жду кого-то, кто может поделиться правильным синтаксисом.
upd2 бинго, этот синтаксис работает, я продолжу завтра пытаться напечатать желаемый xml. pt.put("Root.Set.Field.<xmlattr>.Name", "Hello 1");
boost
, я бы предпочел остаться с boost. Я не хочу добавлять дополнительные фреймворки только для разбора конфигов. - person Oleg Vazhnev   schedule 18.09.2013