TinyXml快速入門(二)

2021-06-22 13:29:32 字數 3761 閱讀 6050

在《tinyxml快速入門(一) 》中我介紹了使用tinyxml庫如何建立和列印xml檔案,下面我介紹使用tinyxml庫對xml檔案進行一系列的操作,包括獲取xml檔案宣告,查詢指定節點、刪除指定節點、修改指定節點和增加節點的用法。在《tinyxml快速入門(一)》中我們知道xml檔案中的乙個節點元素實際包含兩種值:屬性和文字。其中屬性在我看來可以看作是stl中的map,乙個屬性帶乙個屬性值,map中也是乙個鍵帶乙個鍵值。因此查詢指定節點、刪除指定節點和增加節點必然是需要實現兩種方法,刪除指定節點只需要實現一種方法。鑑於內容較多,在本文中介紹獲取xml檔案宣告,查詢指定節點、刪除指定節點的做法,修改指定節點和增加節點的做法在後續的文章介紹。

首先是獲取xml檔案宣告。xml檔案宣告包括三方面的內容:version、standalone和encoding。其原始碼如下:

[cpp]view plain

copy

/*!*  /brief 獲取xml檔案的宣告。

**  /param xmlfile xml檔案全路徑。

*  /param strversion  version屬性值

*  /param strstandalone standalone屬性值

*  /param strencoding encoding屬性值

*  /return 是否成功。true為成功,false表示失敗。

*/bool

getxmldeclare(std::string xmlfile,  

std::string &strversion,  

std::string &strstandalone,  

std::string &strencoding)  

pdoc->loadfile(xmlfile);  

tixmlnode* pxmlfirst = pdoc->firstchild();     

if(null != pxmlfirst)    

}  return

true

;  }  

我們發現無論查詢節點、刪除節點、修改節點和增加節點,其實都離不開乙個函式,就是根據節點名獲取相關節點指標。那麼我們就先實現乙個根據節點名獲取節點指標的函式:

[cpp]view plain

copy

/*!*  /brief 通過根節點和節點名獲取節點指標。

**  /param prootele   xml檔案的根節點。

*  /param strnodename  要查詢的節點名

*  /param node      需要查詢的節點指標

*  /return 是否找到。true為找到相應節點指標,false表示沒有找到相應節點指標。

*/bool

getnodepointerbyname(tixmlelement* prootele,std::string &strnodename,tixmlelement* &node)  

tixmlelement* pele = prootele;    

for(pele = prootele->firstchildelement(); pele; pele = pele->nextsiblingelement())    

return

false

;  }   

有了這個函式,我們就很容易實現查詢節點的相應文字或屬性值。

[cpp]view plain

copy

/*!*  /brief 通過節點查詢。

**  /param xmlfile   xml檔案全路徑。

*  /param strnodename  要查詢的節點名

*  /param strtext      要查詢的節點文字

*  /return 是否成功。true為成功,false表示失敗。

*/bool

querynode_text(std::string xmlfile,std::string strnodename,std::string &strtext)  

pdoc->loadfile(xmlfile);  

tixmlelement *prootele = pdoc->rootelement();  

if(null==prootele)  

tixmlelement *pnode = null;  

getnodepointerbyname(prootele,strnodename,pnode);  

if(null!=pnode)  

else

}  /*!*  /brief 通過節點查詢。

**  /param xmlfile   xml檔案全路徑。

*  /param strnodename  要查詢的節點名

*  /param attmap      要查詢的屬性值,這是乙個map,前乙個為屬性名,後乙個為屬性值

*  /return 是否成功。true為成功,false表示失敗。

*/bool

querynode_attribute(std::string xmlfile,std::string strnodename,std::map&attmap)  

pdoc->loadfile(xmlfile);  

tixmlelement *prootele = pdoc->rootelement();  

if(null==prootele)  

tixmlelement *pnode = null;  

getnodepointerbyname(prootele,strnodename,pnode);  

if(null!=pnode)  

return

true

;  }  

else

return

true

;  }  

下面是刪除指定節點的函式,其中考慮了刪除根節點的情況:

[cpp]view plain

copy

/*!*  /brief 刪除指定節點的值。

**  /param xmlfile xml檔案全路徑。

*  /param strnodename 指定的節點名。

*  /return 是否成功。true為成功,false表示失敗。

*/bool

delnode(std::string xmlfile,std::string strnodename)  

pdoc->loadfile(xmlfile);  

tixmlelement *prootele = pdoc->rootelement();  

if(null==prootele)  

tixmlelement *pnode = null;  

getnodepointerbyname(prootele,strnodename,pnode);  

// 假如是根節點

if(prootele==pnode)  

else

return

false

;  }  

// 假如是其它節點

if(null!=pnode)  

tixmlelement* pparentele = pparnode->toelement();  

if(null!=pparentele)  

}  else

return

false

;  }  

TinyXml快速入門(三)

在 tinyxml 快速入門 二 介紹使用tinyxml庫獲取xml檔案宣告,查詢指定節點 刪除指定節點的做法。在本文中繼續介紹修改指定節點和增加節點的做法。修改節點其實和查詢指定節點的值有點類似,也分為兩個函式,乙個實現修改文字。另乙個負責修改屬性。對於modifynode attribute函式...

tinyxml快速入門 2

在 tinyxml快速入門 一 中我介紹了使用tinyxml庫如何建立和列印xml檔案,下面我介紹使用tinyxml庫對xml檔案進行一系列的操作,包括獲取xml檔案宣告,查詢指定節點 刪除指定節點 修改指定節點和增加節點的用法。在 tinyxml快速入門 一 中我們知道xml檔案中的乙個節點元素實...

TinyXml基本入門(一)

參考 參考 近期在學習xml,偶然得知tinyxml這個東西,想盡快上手。2 tinyxml.h tinystr.h tinystr.cpp tinyxml.cpp tinyxmlparser.cpp tinyxmlerror.cpp 包含到當前工程中。3 新建createxml.cpp.cpp檔案...