• <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 楊粼波

            不明白……  回復  更多評論   

            久久男人中文字幕资源站| 久久久久国产一区二区| 狠狠色丁香婷婷久久综合五月| 久久人人爽人人爽人人片AV麻豆| 久久久久香蕉视频| 一本一道久久综合狠狠老| 99国产欧美久久久精品蜜芽| 久久精品免费一区二区三区| 久久伊人中文无码| 久久精品国产亚洲77777| 久久www免费人成精品香蕉| 久久久这里只有精品加勒比| 国产一区二区精品久久| 午夜精品久久久久9999高清| 成人资源影音先锋久久资源网| 亚洲人成网站999久久久综合| 狠狠色丁香婷婷综合久久来 | 亚洲国产成人久久一区久久| 国内精品伊人久久久久777| 精品久久久久久久久久中文字幕| 国产成人精品综合久久久 | 久久久久亚洲精品天堂久久久久久| 久久精品一区二区三区AV| 国产成人香蕉久久久久| 久久久久久国产精品美女 | 国产精品美女久久久免费| 久久人人添人人爽添人人片牛牛| 精品熟女少妇aⅴ免费久久| 久久精品中文騷妇女内射| 久久精品久久久久观看99水蜜桃| 久久夜色撩人精品国产| 91精品观看91久久久久久| 久久久婷婷五月亚洲97号色| 久久精品久久久久观看99水蜜桃| 久久久精品人妻无码专区不卡| 99热精品久久只有精品| 久久综合欧美成人| 久久99精品免费一区二区 | 欧洲精品久久久av无码电影| 国内精品伊人久久久影院| 热99RE久久精品这里都是精品免费 |