亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

第二人生的源碼分析(六十八)LLXMLNode使用Expat

系統 2253 0
在前面看到怎么打開 XML文件,在那個函數的后面調用parseBuffer函數來分析XML數據,那么在這個函數是怎么樣進行XML數據分析的呢?現在就仔細地分析這個函數的代碼,它的代碼如下:
#001?// static
#002?bool LLXMLNode::parseBuffer(
#003? ?? U8* buffer,
#004? ?? U32 length,
#005? ?? LLXMLNodePtr& node,
#006? ?? LLXMLNode* defaults)
#007?{
?
調用 expat庫函數XML_ParserCreate來創建一個分析器。
#008? ?? // Init
#009? ?? XML_Parser my_parser = XML_ParserCreate(NULL);
?
設置 XML元素的開始函數StartXMLNode和結束函數EndXMLNode。
#010? ?? XML_SetElementHandler(my_parser, StartXMLNode, EndXMLNode);
?
設置不同的字符處理函數 XMLData。
#011? ?? XML_SetCharacterDataHandler(my_parser, XMLData);
#012?
?
開始創建一個 XML節點。
#013? ?? // Create a root node
#014? ?? LLXMLNode *file_node_ptr = new LLXMLNode("XML", FALSE);
#015? ?? LLXMLNodePtr file_node = file_node_ptr;
#016?
?
保存這個節點的分析器。
#017? ?? file_node->mParser = &my_parser;
#018?
?
設置傳送給回調函數的數據。
#019? ?? XML_SetUserData(my_parser, (void *)file_node_ptr);
#020?
?
調用 XML_Parse函數進行XML文件分析。
#021? ?? // Do the parsing
#022? ?? if (XML_Parse(my_parser, (const char *)buffer, length, TRUE) != XML_STATUS_OK)
#023? ?? {
#024? ?????? llwarns << "Error parsing xml error code: "
#025? ?????????????? << XML_ErrorString(XML_GetErrorCode(my_parser))
#026? ?????????????? << " on lne " << XML_GetCurrentLineNumber(my_parser)
#027? ?????????????? << llendl;
#028? ?? }
#029?
?
XML文件分析完成,然后刪除創建的 XML分析器。
#030? ?? // Deinit
#031? ?? XML_ParserFree(my_parser);
#032?
?
?
分析 XML失敗,沒有任何數據。
#033? ?? if (!file_node->mChildren || file_node->mChildren->map.size() != 1)
#034? ?? {
#035? ?????? llwarns << "Parse failure - wrong number of top-level nodes xml."
#036? ?????????????? << llendl;
#037? ?????? node = new LLXMLNode();
#038? ?????? return false;
#039? ?? }
#040?
?
返回已經分析好的 XML節點樹。
#041? ?? LLXMLNode *return_node = file_node->mChildren->map.begin()->second;
#042?
#043? ?? return_node->setDefault(defaults);
#044? ?? return_node->updateDefault();
#045?
#046? ?? node = return_node;
#047? ?? return true;
#048?}
?
從這個函數的代碼里看到,跟前面介紹的 expat例子是一樣的,調用庫函數XML_ParserCreate、XML_SetElementHandler、XML_Parse等三個函數就完成了XML的分析過程,只不過這里會把所有分析到的XML數據生成一棵樹返回來。
?

第二人生的源碼分析(六十八)LLXMLNode使用Expat庫分析XML文件


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!??!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 久久福利青草精品免费 | 欧美在线视频免费 | 色婷婷精品综合久久狠狠 | 四虎成人www国产精品 | 亚州久久| 国产精品久久精品牛牛影视 | 亚洲精品日韩一区二区 | 久久人人网 | 97久久久久国产精品嫩草影院 | 亭亭色| 成人淫片免费视频95视频 | 性欧美极品xxxx欧美一区二区 | 国产成人亚洲精品无广告 | 男女污污视频在线观看 | 久久久噜噜噜 | 久久国产视频在线观看 | 欧美日韩亚洲m码色帝国 | 久久精品一区二区三区资源网 | 久久大香香蕉国产免费网站 | 国产精品18| 牛牛影视ac精品视频 | 草草免费观看视频在线 | 欧美精品九九99久久在观看 | 亚洲精品在线视频观看 | 丁香狠狠色婷婷久久综合 | 亚洲精品久久久午夜伊人 | 亚洲欧洲视频在线 | avtom影院入口四虎 | 擼擼色在线看观看免费 | 精品二区 | 羞羞的视频在线免费观看 | 一级理论片 | 欧美24video| 亚洲精品一区二区三区婷婷月 | 日韩专区亚洲国产精品 | 精品中文字幕乱码一区二区 | 日本人成免费大片 | 毛片大全免费看 | 成人在色线视频在线观看免费大全 | 国产精品视频公开费视频 | 4hu四虎永久免在线视看 |