Я использую boost::property_tree
для чтения и записи файлов конфигурации xml. Я хочу изменить значение некоторых тегов в моем коде и записать их обратно в файл с некоторым разумным форматированием xml (новые строки, отступы и т. Д.).Убрать дерево свойств (XML) удалить пустые строки
В настоящее время я использую
std::fstream fs("filename");
boost::property_tree::ptree pt;
bpt::xml_parser::read_xml(fs,pt);
// replace value
pt.erase("tagname");
pt.put("tagname",newval);
bpt::xml_parser::xml_writer_settings<char> xmlstyle(' ',4);
bpt::xml_parser::write_xml("filename",pt,std::locale(),xmlstyle);
Но мне кажется, что каждый раз, когда тег удаляется, он оставляет за собой пустую строку, а после некоторых итераций XML становится нечитаемым. Есть ли способ удалить пустые строки из самого дерева свойств или из полученного XML-файла с помощью boost?
Я знаю, что есть другие способы удаления новых строк, снова прочитав и разобрав весь файл, но я надеялся на более удобный однострочный.
Я вижу, как ваше регулярное выражение заменит избыточные новые строки, если у вас есть выходной поток файла и текст, заданный в виде строки. Но насколько я понимаю, у меня нет ни одного из приведенных выше примеров кода, так как я могу сделать эту работу с образцом кода из моего вопроса? – untergam
Я вижу, что вы уже нашли решение, но я все еще собираюсь рассказать об этом, потому что он может быть полезен в какой-то момент. Вы начинаете с извлечения содержимого файла в 'std :: string text' и затем объявления' std :: stringstream sstream'. Затем вы вызываете вышеупомянутую функцию, но передаете строковый поток вместо потока файлов. Наконец, вы вызываете 'read_xml()' со строковым потоком, а не файловым потоком. – FallenWarrior