<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
TinyXML下載地址:https://sourceforge.net/projects/tinyxml/
官方檔案:TinyXML
TinyXML是個解析庫,它由兩個標頭檔案(.h檔案)和四個CPP檔案(.cpp檔案)構成,用的時候,只要將(tinyxml.h、tinystr.h、tinystr.cpp、tinyxml.cpp、tinyxmlerror.cpp、tinyxmlparser.cpp)匯入工程就可以用它的東西了。如果需要,可以將它做成自己的DLL來呼叫。
舉一個官方檔案《TinyXML Tutorial》中的例子
<?xml version="1.0" ?> <MyApp> <!-- Settings for MyApp --> <Messages> <Welcome>Welcome to MyApp</Welcome> <Farewell>Thank you for using MyApp</Farewell> </Messages> <Windows> <Window name="MainFrame" x="5" y="15" w="400" h="250" /> </Windows> <Connection ip="192.168.0.1" timeout="123.456000" /> </MyApp>
XML是樹形結構,有層數之分,其結點分為不同的類別,而TinyXML中針對不同類別定義了不同的類,下面簡單介紹一下:(粗體是常用的)
接下來我們以一個目標檢測的標籤檔案為例,來讀取其中的boundingbox座標資訊。
XML檔案:
<annotation> <folder>JPEGImages</folder> <filename>409.bmp</filename> <path>E:JPEGImages409.bmp</path> <source> <database>Unknown</database> </source> <size> <width>847</width> <height>419</height> <depth>3</depth> </size> <segmented>0</segmented> <object> <name>bad_part</name> <pose>Unspecified</pose> <truncated>0</truncated> <difficult>0</difficult> <bndbox> <xmin>512</xmin> <ymin>153</ymin> <xmax>693</xmax> <ymax>325</ymax> </bndbox> </object> <object> <name>bad_part</name> <pose>Unspecified</pose> <truncated>0</truncated> <difficult>0</difficult> <bndbox> <xmin>251</xmin> <ymin>251</ymin> <xmax>321</xmax> <ymax>313</ymax> </bndbox> </object> </annotation>
檔案中有兩個boundingbox
獲取bndbox元素下的最大最小座標:
#include <iostream> //開啟xml檔案需要載入的標頭檔案 #include "tinystr.h" #include "tinyxml.h" #include <string> #include<typeinfo> using namespace std; int main() { //建立xml檔案物件,並讀取xml TiXmlDocument doc; doc.LoadFile("409.xml"); //獲取xml中根元素,並輸出根節點的值,為<annotation> TiXmlElement *root = doc.FirstChildElement(); cout << root->Value() << endl; //獲取根節點孩子,輸出節點值,輸出節點的內容,Text是char* TiXmlElement *child = root->FirstChildElement(); cout << child->Value() << endl; cout << child->GetText() << endl; cout << strlen(child->GetText())<< endl; //cout <<typeid(child->GetText()).name()<< endl; /*目標:找到xmin,xmax,ymin,ymax*/ int xmin1,ymin1,xmax1,ymax1; //從根節點的第一個孩子節點開始遍歷 while(child!=NULL) { if(child->ValueTStr() == "object") { TiXmlElement *box = child->FirstChildElement(); while(box->ValueTStr()!="bndbox") { box = box->NextSiblingElement(); } TiXmlElement *xmin = box->FirstChildElement(); xmin1 = atoi(xmin->GetText()); //NextSiblingElement()獲得同一層下一個節點 TiXmlElement *ymin = xmin->NextSiblingElement(); ymin1 = atoi(ymin->GetText()); TiXmlElement *xmax = ymin->NextSiblingElement(); xmax1 = atoi(xmax->GetText()); TiXmlElement *ymax = xmax->NextSiblingElement(); ymax1 = atoi(ymax->GetText()); cout<<xmin1<<endl; cout<<ymin1<<endl; cout<<xmax1<<endl; cout<<ymax1<<endl; } child = child->NextSiblingElement(); } /* cout<<xmin1<<endl; cout<<ymin1<<endl; cout<<xmax1<<endl; cout<<ymax1<<endl; */ /*一些其他方法的測試*/ /* //獲取兄弟節點中的size節點 TiXmlElement *brother = child->NextSiblingElement("size"); cout << brother->Value() << endl; //cout << typeid(brother->GetText()).name()<< endl; //獲取size節點下的屬性值,<>中的屬性,本例沒有屬性 //cout <<brother->Attribute("width")<<endl; //找size下面節點width TiXmlElement *brother_child = brother->FirstChildElement(); cout << brother_child->Value() << endl; cout << brother_child->GetText() << endl; //讀取到內容,並轉為int型,因為專案需要int資料 int width = atoi(brother_child->GetText()); cout << width << endl; */ return 0; }
到此這篇關於C++中TinyXML讀取xml檔案用法詳解的文章就介紹到這了,更多相關C++ TinyXML讀取xml內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45