前面介紹了什么是
expat庫,也介紹怎么使用它來打開XML文件進(jìn)行分析,接著下來就來分析第二人生里是怎么樣使用它。詳細(xì)的函數(shù)代碼如下:
#001?// static
#002?bool LLXMLNode::parseFile(
#003?
?? LLString filename,
#004?
?? LLXMLNodePtr& node,
#005?
?? LLXMLNode* defaults_tree)
#006?{
?
下面開始調(diào)用文件函數(shù)打開文件。
#007?
?? // Read file
#008?
?? FILE* fp = LLFile::fopen(filename.c_str(), "rb");?????? /* Flawfinder: ignore */
?
下面判斷文件打開是否成功。
#009?
?? if (fp == NULL)
#010?
?? {
#011?
?????? node = new LLXMLNode();
#012?
?????? return false;
#013?
?? }
?
下面獲取文件的長度。先把文件指針移到文件尾,然后獲取當(dāng)前的長度,再把文件指針移回到原來的位置。
#014?
?? fseek(fp, 0, SEEK_END);
#015?
?? U32 length = ftell(fp);
#016?
?? fseek(fp, 0, SEEK_SET);
#017?
?
下面創(chuàng)建文件長度的數(shù)據(jù)緩沖區(qū)。
#018?
?? U8* buffer = new U8[length+1];
?
把數(shù)據(jù)讀取緩沖區(qū)里。
#019?
?? size_t nread = fread(buffer, 1, length, fp);
#020?
?? buffer[nread] = 0;
?
關(guān)閉文件。
#021?
?? fclose(fp);
#022?
?
開始調(diào)用類成員函數(shù)
parseBuffer來分析文件的數(shù)據(jù)。
#023?
?? bool rv = parseBuffer(buffer, nread, node, defaults_tree);
?
刪除分配的內(nèi)存緩沖區(qū)。
#024?
?? delete [] buffer;
#025?
?? return rv;
#026?}
?
上面這個函數(shù)先把文件打開,然后獲取文件的長度,接著創(chuàng)建一個與文件長度一樣的緩沖區(qū),把數(shù)據(jù)讀取到內(nèi)存緩沖區(qū)里,最后調(diào)用函數(shù)
parseBuffer來分析文件的數(shù)據(jù)。簡單簡單的代碼,就是這樣直接和清晰。
?
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

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