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