Я использую дерево свойств Boost для чтения и записи XML. Используя приложение для работы с электронными таблицами, я сделал, чтобы сохранить содержимое таблицы в xml. Это назначение школы, так что я должен использовать следующий формат для XML:Добавление узлов с тем же ключом в дерево свойств
<?xml version="1.0" encoding="UTF-8"?>
<spreadsheet>
<cell>
<name>A2</name>
<contents>adsf</contents>
</cell>
<cell>
<name>D6</name>
<contents>345</contents>
</cell>
<cell>
<name>D2</name>
<contents>=d6</contents>
</cell>
</spreadsheet>
Для простой тестовой программы я писал:
int main(int argc, char const *argv[])
{
boost::property_tree::ptree pt;
pt.put("spreadsheet.cell.name", "a2");
pt.put("spreadsheet.cell.contents", "adsf");
write_xml("output.xml", pt);
boost::property_tree::ptree ptr;
read_xml("output.xml", ptr);
ptr.put("spreadsheet.cell.name", "d6");
ptr.put("spreadsheet.cell.contents", "345");
ptr.put("spreadsheet.cell.name", "d2");
ptr.put("spreadsheet.cell.contents", "=d6");
write_xml("output2.xml", ptr);
return 0;
}
Основываясь на этом question я вижу метод put
заменяющего ничего на этом узле, вместо добавления нового. Какие именно функциональность я вижу:
Output.xml
<?xml version="1.0" encoding="utf-8"?>
<spreadsheet>
<cell>
<name>a2</name>
<contents>adsf</contents>
</cell>
</spreadsheet>
Output2.xml
<?xml version="1.0" encoding="utf-8"?>
<spreadsheet>
<cell>
<name>d2</name>
<contents>=d6</contents>
</cell>
</spreadsheet>
Глядя на documentation я вижу этот add_child
метод, который будет Add the node at the given path. Create any missing parents. If there already is a node at the path, add another one with the same key.
Я не могу понять, как использовать этот метод add_child
, может кто-нибудь объяснить, как его использовать?
Есть ли лучший способ сделать это для достижения формата файла, который я хочу?
Разве вы не можете просто использовать имя ячейки во имя ребенка? то есть '' spreadsheet.cell.d6 "' –
@ k-ballo, потому что это не соответствует требованиям xml. – Deekor