• <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>

            牽著老婆滿街逛

            嚴(yán)以律己,寬以待人. 三思而后行.
            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

            轉(zhuǎn)載自: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 楊粼波 閱讀(1245) 評(píng)論(3)  編輯 收藏 引用

            評(píng)論

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

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

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

            記得所有的value都必須是常量字符串或者是allocstring出來(lái)的,不然死的很難看  回復(fù)  更多評(píng)論   

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

            不明白……  回復(fù)  更多評(píng)論   


            只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問(wèn)   Chat2DB   管理


            99久久免费国产精品| 性高朝久久久久久久久久| 色婷婷综合久久久久中文| 99精品国产99久久久久久97| 久久精品国产99国产精品亚洲| 久久夜色精品国产噜噜麻豆 | 国产成人久久精品二区三区| 午夜肉伦伦影院久久精品免费看国产一区二区三区 | 人妻无码αv中文字幕久久琪琪布| 精品久久久久久无码专区| 久久久久综合国产欧美一区二区| 久久精品中文字幕大胸| 狠狠干狠狠久久| 亚洲国产另类久久久精品小说| 中文字幕亚洲综合久久| 亚洲国产精品无码久久久秋霞2| 国产激情久久久久影院小草| 99久久精品国产一区二区| 久久成人18免费网站| 99久久人妻无码精品系列| 久久久www免费人成精品| 精品久久久无码中文字幕天天 | 久久久国产一区二区三区| 亚洲AV无码久久寂寞少妇| 久久只有这里有精品4| 久久综合九色综合欧美就去吻| 蜜桃麻豆www久久| 波多野结衣中文字幕久久| 性做久久久久久久| 久久AV高潮AV无码AV| 色狠狠久久综合网| 亚洲精品无码久久不卡| 人人狠狠综合久久亚洲高清| 国产福利电影一区二区三区久久久久成人精品综合 | 午夜精品久久久久久影视riav| 久久精品国产一区二区| 久久精品国产色蜜蜜麻豆| 久久亚洲中文字幕精品一区四| 观看 国产综合久久久久鬼色 欧美 亚洲 一区二区 | 午夜精品久久久久久影视777| 中文字幕精品久久|