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

牽著老婆滿街逛

嚴以律己,寬以待人. 三思而后行.
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 楊粼波

不明白……  回復  更多評論   


只有注冊用戶登錄后才能發表評論。
網站導航: 博客園   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>
            欧美福利在线| 久久久高清一区二区三区| 欧美高清视频一区二区| 91久久精品一区二区三区| 麻豆成人av| 免费一级欧美片在线播放| 亚洲国产欧美另类丝袜| 奶水喷射视频一区| 欧美成人免费全部| 中日韩美女免费视频网站在线观看| 午夜精品久久久久久99热软件 | 国产精品久久久久久亚洲调教| 欧美日韩系列| 亚洲一区二区三区免费视频| 亚洲最新在线| 国产视频一区免费看| 午夜精品久久99蜜桃的功能介绍| 老司机久久99久久精品播放免费| 亚洲精品国久久99热| 免播放器亚洲一区| 亚洲视频专区在线| 久久精品91久久久久久再现| 亚洲精品1234| 亚洲男人的天堂在线| 亚洲国产精品黑人久久久| 日韩小视频在线观看专区| 国产亚洲精品久久久| 亚洲国产欧美一区二区三区丁香婷| 欧美亚洲网站| 亚洲另类自拍| 欧美一区二区三区免费大片| 亚洲精品乱码久久久久久久久| 欧美亚洲免费在线| 免费不卡亚洲欧美| 亚洲欧美精品在线观看| 免费观看国产成人| 性欧美暴力猛交另类hd| 欧美福利精品| 久久夜色精品国产欧美乱| 欧美日韩免费精品| 欧美jizz19hd性欧美| 欧美日韩国产页| 久久青青草综合| 欧美视频中文字幕| 亚洲国产高清在线观看视频| 国产三区精品| 亚洲婷婷国产精品电影人久久 | 日韩视频中文| 一区在线免费| 欧美亚洲网站| 亚洲在线观看视频| 欧美黑人在线观看| 老司机aⅴ在线精品导航| 国产欧美日韩精品专区| 亚洲另类自拍| 99爱精品视频| 欧美韩国日本一区| 欧美福利视频在线观看| 国内精品视频666| 午夜精品久久久久久99热软件 | 欧美日韩激情小视频| 欧美成人乱码一区二区三区| 国产欧美日韩一区二区三区在线观看 | 亚洲视频电影在线| 亚洲最新在线| 欧美精品在线免费| 欧美激情导航| 最近看过的日韩成人| 久久久久久久91| 久久久在线视频| 韩日欧美一区二区| 久久蜜臀精品av| 欧美成人dvd在线视频| 在线观看中文字幕亚洲| 久久婷婷av| 亚洲第一精品影视| 亚洲精品免费一二三区| 女人色偷偷aa久久天堂| 亚洲国产高清aⅴ视频| av成人黄色| 国产精品丝袜xxxxxxx| 午夜在线观看免费一区| 久久综合九色综合久99| 亚洲国产精品嫩草影院| 欧美高清视频一区二区三区在线观看| 国产精品99久久99久久久二8| 一本色道久久加勒比88综合| 一本大道久久精品懂色aⅴ| 欧美另类高清视频在线| 国产精品99久久久久久久久久久久 | 亚洲女人天堂av| 久久人人超碰| 在线电影欧美日韩一区二区私密| 亚洲精品中文字幕女同| 亚洲欧美久久| 一区二区视频免费在线观看| 欧美国产一区视频在线观看 | 狠狠色伊人亚洲综合成人| 久久精品视频在线观看| 亚洲成色777777女色窝| 亚洲一区一卡| 在线观看视频日韩| 欧美日韩一区二区免费在线观看| 欧美国产高清| 亚洲女女女同性video| 国内综合精品午夜久久资源| 美女视频一区免费观看| 一本色道久久综合亚洲精品按摩 | 国产综合香蕉五月婷在线| 久久久夜精品| 夜夜嗨av一区二区三区四季av | 国产欧美一区二区色老头 | 午夜日韩电影| 91久久久久久久久久久久久| 国产精品久久久久久久久婷婷| 欧美国产专区| 香蕉亚洲视频| 99在线热播精品免费99热| 国产揄拍国内精品对白| 欧美日韩中文字幕在线视频| 性亚洲最疯狂xxxx高清| 亚洲激情成人网| 麻豆国产va免费精品高清在线| 国产精品视频大全| 欧美激情亚洲一区| 久久久久久久久久看片| 亚洲欧美精品在线观看| 亚洲国产mv| 欧美不卡高清| 久久久无码精品亚洲日韩按摩| 韩国av一区二区三区在线观看| 亚洲欧美日韩视频二区| 亚洲三级影片| 欧美国产日韩免费| 免费看精品久久片| 久久久久国色av免费看影院| 性欧美超级视频| 午夜激情一区| 午夜精品一区二区三区在线 | 欧美v国产在线一区二区三区| 久久这里有精品视频| 欧美一区二区视频97| 在线亚洲+欧美+日本专区| 亚洲日本在线观看| 亚洲欧洲在线看| 亚洲人精品午夜| 亚洲人成人77777线观看| 亚洲国产精品va| 亚洲欧洲综合另类在线| 91久久精品一区| 99精品99| 中文亚洲字幕| 性色av一区二区三区红粉影视| 黄色成人av在线| 在线免费不卡视频| 亚洲激情成人| 日韩西西人体444www| 亚洲精品乱码久久久久久久久| 国产精品日韩在线| 国产欧美在线看| 国产一区二区三区在线观看精品| 久久综合给合久久狠狠狠97色69| 亚洲经典自拍| av成人毛片| 亚洲综合色噜噜狠狠| 性欧美xxxx大乳国产app| 久久国产精品亚洲va麻豆| 久久成人精品电影| 久久蜜桃av一区精品变态类天堂| 亚洲最黄网站| 欧美一区亚洲一区| 欧美1区视频| 欧美午夜理伦三级在线观看| 国产一区二区三区成人欧美日韩在线观看 | 欧美在线观看视频| 久久国产直播| 欧美国产一区二区三区激情无套| 久久爱www.| 欧美激情综合五月色丁香小说| 亚洲一区二区日本| 久久久久国产免费免费| 欧美激情一二区| 国产欧美日韩另类视频免费观看| 欧美国产一区二区在线观看| 欧美色精品在线视频| 黄色亚洲免费| 在线视频亚洲一区| 最新亚洲激情| a4yy欧美一区二区三区| 国外成人在线| 亚洲免费观看高清在线观看 | 久久蜜桃av一区精品变态类天堂| 一区二区不卡在线视频 午夜欧美不卡' | 国产一级一区二区| 亚洲国产日韩欧美在线图片 | 国产精品女主播一区二区三区| 蘑菇福利视频一区播放| 国产精品mv在线观看| 亚洲黄网站在线观看| 午夜国产一区|