我使用boost::property_tree
來讀取和寫入xml配置文件。我想更改代碼中某些標記的值,並將它們寫回文件,並使用一些合理的xml格式(新行,縮進等)。Boost屬性樹(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