• <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函數,將最后一個字符設置為'\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 楊粼波

            不明白……  回復  更多評論   

            99精品久久久久中文字幕| 久久久久久久97| 日韩中文久久| 99久久精品免费看国产一区二区三区 | 精品久久久久久久久免费影院| 日日狠狠久久偷偷色综合96蜜桃 | 亚洲欧美久久久久9999| 麻豆一区二区99久久久久| 国产精品久久久久jk制服| 久久亚洲色一区二区三区| 久久婷婷五月综合国产尤物app| 久久国产乱子伦精品免费强| 区久久AAA片69亚洲 | 日韩精品久久久久久久电影| 久久精品亚洲日本波多野结衣| 久久久久久国产精品免费免费| 久久久无码一区二区三区| 久久夜色精品国产www| 99re久久精品国产首页2020| 麻豆av久久av盛宴av| 国产AⅤ精品一区二区三区久久| 麻豆亚洲AV永久无码精品久久| 四虎国产精品成人免费久久| 99久久精品免费看国产一区二区三区| 久久天天躁狠狠躁夜夜不卡| 久久久久亚洲精品中文字幕| 精品久久一区二区三区| 国产产无码乱码精品久久鸭| 亚洲AV日韩精品久久久久久| 无码国内精品久久人妻麻豆按摩| 国产综合精品久久亚洲| 一本一道久久精品综合| 久久精品国产99国产精偷| 99国产精品久久| 91性高湖久久久久| 91精品免费久久久久久久久| 国产欧美久久久精品| 久久久久综合网久久| 久久伊人精品青青草原高清| 91久久国产视频| 久久嫩草影院免费看夜色|