• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            牽著老婆滿街逛

            嚴以律己,寬以待人. 三思而后行.
            GMail/GTalk: yanglinbo#google.com;
            MSN/Email: tx7do#yahoo.com.cn;
            QQ: 3 0 3 3 9 6 9 2 0 .

            Quick notes on how to use RapidXML

            轉載自:http://www.ffuts.org/blog/quick-notes-on-how-to-use-rapidxml/

            There’s a C++ XML library called RapidXML which is perfect for most non-enterprise uses of XML. I wouldn’t call this a tutorial, but I hope this ends up helping someone. The documentation isn’t very explicit on how to output an XML declaration, for example.

            How to create your XML from scratch and then output this XML into a string, with an XML declaration:

            <?xml version="1.0" encoding="utf-8"?>
            <rootnode version="1.0" type="example">
             
            <childnode/>
            </rootnode>
            using namespace rapidxml;

            xml_document
            <> doc;

            // xml declaration
            xml_node
            <>* decl = doc.allocate_node(node_declaration);
            decl
            ->append_attribute(doc.allocate_attribute("version", "1.0"));
            decl
            ->append_attribute(doc.allocate_attribute("encoding", "utf-8"));
            doc
            .append_node(decl);

            // root node
            xml_node
            <>* root = doc.allocate_node(node_element, "rootnode");
            root
            ->append_attribute(doc.allocate_attribute("version", "1.0"));
            root
            ->append_attribute(doc.allocate_attribute("type", "example"));
            doc
            .append_node(root);

            // child node
            xml_node
            <>* child = doc.allocate_node(node_element, "childnode");
            root
            ->append_node(child);

            std
            ::string xml_as_string;
            // watch for name collisions here, print() is a very common function name!
            print(std::back_inserter(xml_as_string), doc);
            // xml_as_string now contains the XML in string form, indented
            // (in all its angle bracket glory)

            std
            ::string xml_no_indent;
            // print_no_indenting is the only flag that print() knows about
            print(std::back_inserter(xml_as_string), doc, print_no_indenting);
            // xml_no_indent now contains non-indented XML


            Parsing and traversing an XML document like this one:

            <?xml version="1.0" encoding="utf-8"?>
            <rootnode version="1.0" type="example">
             
            <childnode entry="1">
               
            <evendeepernode attr1="cat" attr2="dog"/>
               
            <evendeepernode attr1="lion" attr2="wolf"/>
             
            </childnode>
             
            <childnode entry="2">
             
            </childnode>
            </rootnode>
            void traverse_xml(std::string input_xml)
            {
               
            // (input_xml contains the above XML)

               
            // make a safe-to-modify copy of input_xml
               
            // (you should never modify the contents of an std::string directly)
                vector
            <char> xml_copy(input_xml.begin(), input_xml.end());
                xml_copy
            .push_back('\0');

               
            // only use xml_copy from here on!
                xml_document
            <> doc;
               
            // we are choosing to parse the XML declaration
               
            // parse_no_data_nodes prevents RapidXML from using the somewhat surprising
               
            // behavior of having both values and data nodes, and having data nodes take
               
            // precedence over values when printing
               
            // >>> note that this will skip parsing of CDATA nodes <<<
                doc
            .parse<parse_declaration_node | parse_no_data_nodes>(&xml_copy[0]);

               
            // alternatively, use one of the two commented lines below to parse CDATA nodes,
               
            // but please note the above caveat about surprising interactions between
               
            // values and data nodes (also read http://www.ffuts.org/blog/a-rapidxml-gotcha/)
               
            // if you use one of these two declarations try to use data nodes exclusively and
               
            // avoid using value()
               
            //doc.parse<parse_declaration_node>(&xml_copy[0]); // just get the XML declaration
               
            //doc.parse<parse_full>(&xml_copy[0]); // parses everything (slowest)

               
            // since we have parsed the XML declaration, it is the first node
               
            // (otherwise the first node would be our root node)
               
            string encoding = doc.first_node()->first_attribute("encoding")->value();
               
            // encoding == "utf-8"

               
            // we didn't keep track of our previous traversal, so let's start again
               
            // we can match nodes by name, skipping the xml declaration entirely
                xml_node
            <>* cur_node = doc.first_node("rootnode");
               
            string rootnode_type = cur_node->first_attribute("type")->value();
               
            // rootnode_type == "example"

               
            // go straight to the first evendeepernode
                cur_node
            = cur_node->first_node("childnode")->first_node("evendeepernode");
               
            string attr2 = cur_node->first_attribute("attr2")->value();
               
            // attr2 == "dog"

               
            // and then to the second evendeepernode
                cur_node
            = cur_node->next_sibling("evendeepernode");
                attr2
            = cur_node->first_attribute("attr2")->value();
               
            // now attr2 == "wolf"
            }

            posted on 2010-08-18 02:35 楊粼波 閱讀(1243) 評論(3)  編輯 收藏 引用

            評論

            # re: Quick notes on how to use RapidXML 2010-08-18 20:29 dayforever

            記得修改allocstring函數(shù),將最后一個字符設置為'\0',不然死很難看
            記得使用前先看看對應flag的意思,不然死的很難看  回復  更多評論   

            # re: Quick notes on how to use RapidXML 2010-08-18 20:30 dayforever

            記得所有的value都必須是常量字符串或者是allocstring出來的,不然死的很難看  回復  更多評論   

            # re: Quick notes on how to use RapidXML 2010-08-23 20:49 楊粼波

            不明白……  回復  更多評論   

            伊人伊成久久人综合网777| 人妻精品久久无码区| A级毛片无码久久精品免费| 色综合合久久天天综合绕视看| 色天使久久综合网天天| 伊人色综合久久天天网| 久久天天躁狠狠躁夜夜不卡| 久久天堂AV综合合色蜜桃网| 久久精品国产WWW456C0M| 亚洲精品乱码久久久久久蜜桃不卡 | 久久婷婷五月综合97色一本一本 | 99re这里只有精品热久久 | 久久久久国色AV免费观看| 四虎久久影院| 久久久噜噜噜久久中文福利| 狠狠精品久久久无码中文字幕| 97精品伊人久久久大香线蕉 | 国产精品一区二区久久精品涩爱 | 久久亚洲国产成人精品性色| 国产99久久久国产精品~~牛 | 国产精品美女久久久久网| 精品久久久久久无码国产| 无码国内精品久久人妻蜜桃| 久久婷婷五月综合色99啪ak| 精品久久一区二区三区| 日韩久久久久久中文人妻| 亚洲国产香蕉人人爽成AV片久久 | 88久久精品无码一区二区毛片| 久久久久无码精品| 国产精品一久久香蕉产线看| 久久强奷乱码老熟女网站| 中文精品久久久久国产网址 | 蜜桃麻豆WWW久久囤产精品| 久久综合狠狠综合久久综合88| 久久国产AVJUST麻豆| 久久精品视频91| 久久国产精品视频| 色综合久久久久综合99| 91麻精品国产91久久久久 | 国产精品一区二区久久精品| 无码伊人66久久大杳蕉网站谷歌|