青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

牽著老婆滿街逛

嚴以律己,寬以待人. 三思而后行.
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 楊粼波 閱讀(1250) 評論(3)  編輯 收藏 引用

評論

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

記得修改allocstring函數(shù),將最后一個字符設(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 楊粼波

不明白……  回復  更多評論   


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


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            老司机成人在线视频| 久久综合色婷婷| 午夜精品一区二区在线观看| 一本久道久久久| 久久久青草青青国产亚洲免观| 欧美在线视频免费观看| 亚洲视频图片小说| 亚洲欧美精品一区| 久久久视频精品| 欧美精品在线网站| 国产精品日韩| **网站欧美大片在线观看| 99国产精品视频免费观看| 一区二区三区回区在观看免费视频| 99精品热视频只有精品10| 亚洲视频一区二区免费在线观看| 亚洲在线观看免费| 久久精品导航| 亚洲第一偷拍| 日韩视频免费看| 欧美在线视频在线播放完整版免费观看 | 久久岛国电影| 欧美二区视频| 亚洲婷婷综合色高清在线| 久久久999| 欧美日韩1区2区| 国模一区二区三区| 亚洲视频欧美在线| 欧美成人综合网站| 欧美中文在线字幕| 亚洲日本无吗高清不卡| 亚洲欧美日韩国产综合精品二区| 美日韩精品视频| 欧美无砖砖区免费| 亚洲国产影院| 久久久久久久久久久久久久一区| 亚洲国产一区二区三区高清| 亚洲欧美日韩另类精品一区二区三区| 噜噜噜91成人网| 国产精品综合| 亚洲精品国精品久久99热| 久久精品欧美| 亚洲综合视频一区| 欧美色图首页| 日韩午夜在线播放| 亚洲黄色免费网站| 久久男人资源视频| 国产夜色精品一区二区av| 亚洲一级片在线观看| 亚洲国产精品va在线看黑人动漫 | 亚洲一区视频在线| 欧美激情一区二区三区| 欧美在线国产| 国产精品一区二区三区成人| 99国产精品久久久久老师| 午夜免费日韩视频| 久久综合狠狠综合久久综合88| 99国产精品99久久久久久粉嫩| 免费一级欧美片在线播放| 亚洲国产精品成人久久综合一区| 久久成人免费| 一区二区在线观看视频在线观看| 亚洲电影成人| 国产欧美1区2区3区| 亚洲精品一区二区三| 欧美成人午夜免费视在线看片| 欧美一区二区视频97| 欧美 日韩 国产 一区| 国产午夜精品久久| 久久久精品日韩欧美| 亚洲午夜久久久久久久久电影院 | 国产精品有限公司| 亚洲欧美亚洲| 欧美亚洲视频一区二区| 国产亚洲欧美另类中文| 久久久久久久久岛国免费| 性欧美video另类hd性玩具| 国产热re99久久6国产精品| 久久久久综合一区二区三区| 午夜精品久久久久久久久久久久| 欧美日韩在线视频观看| 亚洲影院在线| 亚洲一区二区黄| 国产亚洲一区二区三区在线播放| 久久久久久综合网天天| 久久精品国产成人| 国产精品久久久久永久免费观看 | 欧美经典一区二区三区| 这里是久久伊人| 亚洲永久免费av| 国产欧美亚洲视频| 快射av在线播放一区| 欧美国产日韩精品| 在线亚洲欧美视频| 夜夜嗨av一区二区三区四区| 国产农村妇女毛片精品久久莱园子| 久久久久久国产精品mv| 久久午夜av| 日韩亚洲视频| 亚洲天堂成人在线观看| 国内激情久久| 亚洲人体1000| 国产精品地址| 老司机一区二区| 999亚洲国产精| 欧美诱惑福利视频| 亚洲精品在线三区| 亚洲一区免费在线观看| 亚洲国产成人精品久久| 中文在线一区| 亚洲美女91| 久久久999精品| 一区二区三区成人| 极品尤物久久久av免费看| 欧美午夜美女看片| 免费观看在线综合| 欧美性色视频在线| 欧美一区成人| 亚洲精品国产欧美| 一区二区三区四区在线| 黄色精品网站| 亚洲一区亚洲二区| 亚洲毛片视频| 久久久精品午夜少妇| 一区二区三区日韩在线观看 | 久久精品亚洲一区二区三区浴池| 欧美高清在线视频观看不卡| 香蕉久久夜色精品国产使用方法 | 欧美激情亚洲激情| 另类激情亚洲| 国产精品无码永久免费888| 亚洲国产老妈| 激情校园亚洲| 欧美一级理论性理论a| 亚洲无人区一区| 老司机午夜精品视频在线观看| 亚洲在线观看| 国产精品美女主播| 99精品国产在热久久婷婷| 亚洲高清久久久| 欧美一区二区| 久久精品国产亚洲5555| 欧美午夜免费| 亚洲第一色在线| 欧美日韩在线一二三| 99精品国产福利在线观看免费| 亚洲国产日韩综合一区| 欧美一区二区三区播放老司机 | 国产一区二区三区视频在线观看| 这里只有精品在线播放| 夜夜嗨av色综合久久久综合网| 免费观看国产成人| 亚洲伦理久久| 夜夜嗨av一区二区三区四区| 你懂的国产精品永久在线| 美女国产一区| 亚洲电影激情视频网站| 久久久久在线| 亚洲狠狠丁香婷婷综合久久久| 亚洲精品国产视频| 国产精品色网| 久久成人人人人精品欧| 欧美在线不卡视频| 国产亚洲午夜| 在线视频日本亚洲性| 亚洲男女自偷自拍| 国产无一区二区| 葵司免费一区二区三区四区五区| 亚洲激情综合| 亚洲一区二区三区免费观看 | 亚洲精品少妇30p| 欧美日韩免费| 欧美久久影院| 亚洲精品一二三区| 欧美午夜精品理论片a级按摩| 亚洲免费一区二区| 欧美亚洲视频一区二区| 欧美高清免费| 欧美一区深夜视频| 亚洲国产女人aaa毛片在线| 欧美精品少妇一区二区三区| 一区二区三区视频在线观看| 午夜在线观看欧美| 亚洲精品免费一二三区| 国产精品综合色区在线观看| 久久久午夜视频| av成人免费观看| 久久久久久久一区二区三区| 亚洲国产成人在线| 国产精品国产精品国产专区不蜜| 久久国产精彩视频| 亚洲美女在线视频| 亚洲国产精品成人一区二区| 亚洲欧美国产精品va在线观看| 伊人成人开心激情综合网| 欧美日韩在线播| 久久久久天天天天| 亚洲欧美激情一区二区| 亚洲精选在线| 亚洲精美视频|