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

牽著老婆滿街逛

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

不明白……  回復  更多評論   


只有注冊用戶登錄后才能發(fā)表評論。
網站導航: 博客園   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>
            国产亚洲一区二区三区在线观看 | 亚洲第一综合天堂另类专| 欧美精品久久一区二区| 国产三级精品在线不卡| 一区二区三区国产| 久久精品男女| 亚洲国产精品久久人人爱蜜臀 | 欧美激情欧美激情在线五月| 亚洲精品一区在线观看| 国产精品久久久久久久久久三级 | 亚洲视频精品在线| 在线观看成人网| 国产精品分类| 欧美成人按摩| 欧美一级久久久| 亚洲国产婷婷香蕉久久久久久| 久久久中精品2020中文| 日韩亚洲精品电影| 老司机精品视频网站| 一本久久综合| 亚洲国产一区二区视频| 国产裸体写真av一区二区| 欧美二区在线| 香蕉成人久久| 亚洲视频电影在线| 亚洲国产欧美精品| 亚洲香蕉成视频在线观看| 亚洲三级视频| 免费亚洲一区二区| 久久看片网站| 欧美一区激情| 亚洲嫩草精品久久| 99国产精品久久久| 亚洲精品国产精品国自产观看| 国语自产精品视频在线看一大j8| 欧美日韩国产精品成人| 欧美成人免费在线| 国产日韩欧美在线一区| 日韩午夜在线| 欧美不卡三区| 亚洲国产91| 亚洲电影毛片| 欧美怡红院视频| 久久精精品视频| 久久久久国产精品www| 欧美日韩性视频在线| 欧美日本精品一区二区三区| 欧美成人国产| 韩国久久久久| 欧美一区免费| 亚洲尤物精选| 欧美一区高清| 99精品视频一区二区三区| 亚洲作爱视频| 奶水喷射视频一区| 久久国产天堂福利天堂| 欧美午夜片在线观看| 国产九九精品| 亚洲欧美日本日韩| 亚洲手机视频| 国产精品久久久久毛片大屁完整版 | 99国产精品视频免费观看一公开| 免费在线一区二区| 欧美三级视频在线| 国产精品视频久久久| 国产主播一区| 一本高清dvd不卡在线观看| 亚洲国产高清自拍| 欧美高清一区二区| 一区二区三区精品视频在线观看| 亚洲欧美成人精品| 亚洲视频一二| 国产日韩一级二级三级| 久久久伊人欧美| 久久亚洲综合| 国产精品电影在线观看| 亚洲欧美在线播放| 亚洲国产精品久久久久久女王| 久久亚洲色图| 日韩视频一区二区三区在线播放免费观看| 亚洲成人在线视频播放 | 久久久精品tv| 国产精品久久久久aaaa九色| 亚洲一区国产精品| 欧美激情一区二区三区在线视频观看 | 美女久久网站| 欧美www在线| 亚洲视频免费观看| 午夜一区二区三区在线观看 | 午夜一区不卡| 亚洲美女啪啪| 国产嫩草一区二区三区在线观看 | 中国日韩欧美久久久久久久久| 国产精品五月天| 中文日韩在线视频| 99精品欧美一区二区三区综合在线| 欧美日韩国产一区二区三区地区 | 黑人巨大精品欧美黑白配亚洲 | 亚洲人成网站777色婷婷| 国产精品国产一区二区| 久久一日本道色综合久久| 99re视频这里只有精品| 国产精品―色哟哟| 欧美电影在线播放| 久久久免费精品| 中文日韩在线视频| 久久亚洲色图| 欧美一区二区三区日韩| 欧美精品一区二区三区一线天视频 | 国产精品成人一区二区三区夜夜夜 | 91久久精品国产91久久| 欧美成人精品| 国产精品综合网站| 亚洲区一区二| 狠狠色伊人亚洲综合网站色| 日韩小视频在线观看| 在线激情影院一区| 欧美亚洲综合久久| 亚洲视频一区二区在线观看| 噜噜噜躁狠狠躁狠狠精品视频| 影音先锋日韩资源| 亚洲一区二区三区四区在线观看 | 亚洲男人av电影| 国产日韩欧美精品一区| 亚洲精品久久久久久下一站 | 亚洲电影观看| 在线观看久久av| 性18欧美另类| 久久se精品一区二区| 欧美一区二区三区四区高清| 亚洲午夜激情网站| 小黄鸭精品密入口导航| 亚洲欧美三级伦理| 国产精品免费小视频| 一本色道久久综合狠狠躁的推荐| 亚洲精品久久久一区二区三区| 久久久久一本一区二区青青蜜月| 久久成人精品视频| 国产一区二区成人| aⅴ色国产欧美| 欧美日韩天堂| 欧美成人精品一区二区| 在线精品福利| 欧美国产日韩a欧美在线观看| 亚洲大片在线| 99国产精品久久久久久久| 欧美日韩三级一区二区| 在线亚洲观看| 久久精品亚洲精品| 亚洲风情亚aⅴ在线发布| 欧美二区在线| 亚洲图片自拍偷拍| 久久精品青青大伊人av| 黄色成人在线免费| 欧美高清在线视频观看不卡| 亚洲免费观看高清完整版在线观看熊| 中国成人在线视频| 国产欧美日韩激情| 久久久精品性| 亚洲国产另类久久精品| 在线中文字幕一区| 国产一区91精品张津瑜| 免费观看欧美在线视频的网站| 亚洲激情一区二区| 国产一区二区三区丝袜| 久久精品国产亚洲一区二区| 欧美成人午夜激情在线| 一本色道久久综合狠狠躁篇的优点 | 一级日韩一区在线观看| 久久久99精品免费观看不卡| 欧美精品久久99久久在免费线| 日韩视频一区二区三区在线播放| 午夜影视日本亚洲欧洲精品| 怡红院精品视频| 欧美日韩国产综合网| 欧美一区2区三区4区公司二百| 欧美激情一区二区三区成人 | 欧美国产一区二区| 亚洲欧美日产图| 亚洲国产精品久久久久秋霞影院| 欧美日韩国产精品一区二区亚洲| 午夜精品久久久久| 亚洲欧美视频一区二区三区| 激情成人综合| 先锋a资源在线看亚洲| 欧美freesex交免费视频| 一区二区三区日韩精品视频| 国产一区二区三区奇米久涩| 欧美激情视频网站| 久久精品国产999大香线蕉| 亚洲精品免费观看| 免费亚洲视频| 久久久久这里只有精品| 亚洲亚洲精品在线观看| 亚洲欧洲日本在线| 国语精品一区| 国产伦精品一区二区三区照片91 | 伊人成人在线| 国产精品手机视频| 欧美激情亚洲另类|