tinyxml快速入門 2

2021-08-21 13:18:41 字數 3278 閱讀 7050

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

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

/*!*  \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;

}/*!*  \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;

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

/*!*  \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

return true;

}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;

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

/*!*  \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快速入門(二)

在 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檔案...