[英]Boost property tree (XML) remove blank lines
我正在使用boost::property_tree
來讀取和寫入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變得不可讀。 有沒有一種方法可以使用boost從屬性樹本身或從生成的xml文件中刪除空行?
我知道還有其他方法可以通過再次讀取和解析整個文件來刪除換行符,但是我希望有一個更方便的單行代碼。
不是Boost,而是空行。 在將輸出寫入文件之前,可以在輸出上使用std::regex_replace()
,這樣可以刪除空白行。
std::regex_replace(std::ostreambuf_iterator<char>(fout), text.begin(), text.end(), std::regex("(\\n+)"), "\n");
以fout
作為文件輸出流,以text
作為輸出數據,作為std::string
。
這將替換每個換行符,然后替換另一個換行符,並且在換行符之間不包含任何字符。
好的,看起來答案已經在Stack Overflow上了,我只是沒有找到答案(帖子中沒有提到換行符)
boost :: property_tree XML漂亮打印
解決方案是使用boost::property_tree::xml_parser::trim_whitespace
讀取文件
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.