Parsing XML Attributes with Boost

后端 未结 3 2029
北恋
北恋 2020-12-08 15:56

I would like to share with you an issue I\'m having while trying to process some attributes from XML elements in C++ with Boost libraries (version 1.52.0). Given the followi

3条回答
  •  孤城傲影
    2020-12-08 16:47

    The problem with your program is located in this line:

    const ptree & attributes = formats.get_child(at, empty_ptree());
    

    With this line you are asking to get the child pet. from pets and you do this 3 times independently of whichever f you are traversing. Following this article I'd guess that what you need to use is:

    const ptree & attributes = f.second.get_child("", empty_ptree());
    

    The full code, that works with both your xml files, is:

    #define ATTR_SET "."
    #define XML_PATH1 "./pets.xml"
    
    #include 
    #include 
    #include 
    #include 
    #include 
    
    using namespace std;
    using namespace boost;
    using namespace boost::property_tree;
    
    const ptree& empty_ptree(){
        static ptree t;
        return t;
    }
    
    int main() {
        ptree tree;
        read_xml(XML_PATH1, tree);
        const ptree & formats = tree.get_child("pets", empty_ptree());
        BOOST_FOREACH(const ptree::value_type & f, formats){
            string at = f.first + ATTR_SET;
            const ptree & attributes = f.second.get_child("", empty_ptree());
            cout << "Extracting attributes from " << at << ":" << endl;
            BOOST_FOREACH(const ptree::value_type &v, attributes){
                cout << "First: " << v.first.data() << " Second: " << v.second.data() << endl;
            }
        }
    }
    

提交回复
热议问题