Search code examples
c++boostboost-propertytree

how to remove xml's attribute using boost's ptree?


how to remove xml attribute title using boost's ptree? I had one xml, I tried followed code to remove attribute title and save to new xml but failed(new.xml still had title attribute).

xml:

<?xml version="1.0" encoding="utf-8"?>
<tokens title="issues"></tokens>

the code:

 ptree pt;
 read_xml("C://old.xml", pt);

 pt.erase("tokens.<xmlattr>.title"); //try one
 pt.erase("tokens.<xmlattr>"); //try two

 write_xml("C://new.xml", pt);

is there no any methods for boost ptree to remove attribute?


Solution

  • You can try something like this (with proper error handling):

    #include <boost/property_tree/xml_parser.hpp>
    #include <boost/property_tree/exceptions.hpp>
    #include <sstream>
    #include <iostream>
    
    using namespace boost;
    using namespace  boost::property_tree;
    using namespace std;
    
    
    int main()
    {
        ptree pt;
        {
            std::stringstream strm;
            strm << "<?xml version='1.0' encoding='utf-8'?> <tokens title='issues'></tokens>";
            read_xml(strm, pt);
        }
    
        pt.find("tokens")->second.erase("<xmlattr>");
    
        write_xml(cout, pt, xml_writer_make_settings(' ', 2));
    }
    

    Output:

    $ ./test
    <?xml version="1.0" encoding="utf-8"?>
    <tokens/>