zoukankan      html  css  js  c++  java
  • boost write_xml不保存attribute 备忘

    Attributes in property tree are added as sub-nodes. 

    property tree 属性作为子节点 (坑坑坑坑坑)

    使用

    write_xml_element(std::cout, pt.front().first, pt.front().second, 0, boost::property_tree::xml_writer_make_settings<std::string>(' ', 0));

    1 You can use the undocumented function write_xml_element to write the single element (using the key as element name):
    
        // write the single element: (undocumented API)
        boost::property_tree::xml_parser::write_xml_element(
                std::cout, it->first, it->second,
                0, settings
            );
    2 or you can create a new ptree object with the single child
    
        ptree tmp;
        tmp.add_child(it->first, it->second);
        write_xml(std::cout, tmp, settings);
    #include <iostream>
    #include <boost/property_tree/xml_parser.hpp>
    #include <boost/property_tree/ptree.hpp>
    using namespace std;
    
    int main() {
       
    auto str=R"(xmlcontent)";
    using namespace boost::property_tree;
           iptree tree;
        stringstream ss;
        ss<<str;
        boost::property_tree::xml_parser::read_xml(ss,tree);
        
        
            iptree pchilds = tree.get_child("MainTask");
           // write_xml(std::cout, tree);
            for (auto pos= pchilds.begin(); pos != pchilds.end(); ++pos)
            {
                bool decode_flag = false;
                std::string name = pos->first;
                iptree tempNode = pos->second;
                if (name == "<xmlattr>") {
                    
                    continue;
                }
                
                if (name == "subnode") //子节点
                {
    //获取所有子节点

    iptree temppp;
    auto& attributes = tempNode.get_child("<xmlattr>", temppp);
    for(auto &v: attributes){
    cout << "First: " << v.first.data() << " Second: " << v.second.data() << endl;
    }


    for(auto child:tempNode.get_child("")){ //if( child.first == "<xmlattr>" ) { // write_xml(std::cout,child.second); // write_xml_element(std::cout, child.first, child.second, 0, boost::property_tree::xml_writer_make_settings<std::string>(' ', 0)); write_xml_element(std::cout,ptree::key_type(),child.second,0,xml_writer_make_settings<std::string>('', 0)); //cout<<child.second.data()<<endl; // } } //string sss=tempNode.get("<xmlattr>", ""); //std::cout<<tempNode.data()<<endl; //write_xml(std::cout,tempNode ,options); } } }

    参考:

    https://www.titanwolf.org/Network/q/d9d0c6a1-6771-4da9-985e-a7975028ebee/y

    https://stackoverflow.com/questions/14010473/parsing-xml-attributes-with-boost

    https://www.technical-recipes.com/2014/using-boostproperty_tree/

    使用

    http://www.ce.unipr.it/people/medici/boost_ptree.html

    https://topic.alibabacloud.com/a/boost-ptree-operation-xml-easy-and-useful_8_8_10266710.html

    关键点

    https://stackoverflow.com/questions/53603392/boost-property-tree-iterating-through-attributes-of-repeated-child-elements-wit

    https://stackoverflow.com/questions/16058204/omit-xml-declaration-when-saving-xml-with-boost

    忽略声明

    https://stackoverflow.com/questions/47448864/removing-encoding-attribute-from-xml-using-boost

    https://stackoverflow.com/questions/16058204/omit-xml-declaration-when-saving-xml-with-boost

    格式化

    https://stackoverflow.com/questions/55980786/how-to-serialize-a-subtree-of-a-boost-property-tree-to-xml

    https://stackoverflow.com/questions/35954432/how-to-get-all-child-node-values

  • 相关阅读:
    九个令人兴奋的新功能将与Java 9 展示两点
    自学前端开发 新版css时钟效果图
    自学前端,你要的学习资料到了~~~~~~
    Angularjs中ng-repeat与移动端滑动插件iScroll的冲突
    计蒜客学习记录
    明明的随机数
    模板题
    泉州一中复赛模拟
    快速幂模板
    NOIP2013
  • 原文地址:https://www.cnblogs.com/wolbo/p/14659963.html
Copyright © 2011-2022 走看看