tinyxml在linux和windows下的編譯及使用詳解
1.XML全稱EXtensible Markup Language,翻譯為可擴充套件標記語言,XML檔案通常就是一個文字檔案,可以使用任何編碼
2.TinyXML是一個開源的C++用來處理XML的第三方庫
二:說明
1.
2. 部落格內容及所有程式碼均是在該版本下編譯,執行,測試通過的,示例程式碼下載地址
Linux下示例程式碼:(內有介紹文件,請按照文件步驟操作,保證可以執行成功)
三.Windows下的編譯1.從上面的地址下載得到tinyxml_2_6_2.zip檔案,解壓得到tinyxml_2_6_2資料夾
2.進入目錄tinyxml_2_6_2/tinyxml,可以看到原始碼一共2個頭檔案,4個原始檔,分別是tinyxml.h,tinystr.h,tinyxml.cpp,tinystr.cpp,tinyxmlerror.cpp,tinyxmlparse.cpp
3.由於tinyxml庫很小,沒必要編譯成靜態庫或者動態庫,把上面列舉的6個檔案拷貝到示例工程目錄下即可直接使用
四.Windows下的使用
1.建立一個空的win32控制檯工程,類似HellowWorld的工程即可,我這裡工程命名為tinyxmlExample
2.在本示例工程根目錄新增tinyxml資料夾,把上述列舉的6個tinyxml檔案拷貝到該目錄下,在屬性頁
配置屬性 -> C/C++ -> 常規 -> 附加包含目錄 中設定該工程的標頭檔案目錄,即“../”,表示附加了根目錄
3. 在工程中新增原始檔,把整個tinyxml包含進來,這樣所有的程式碼就包含進來了
4.新增一個原始檔main.cpp,程式碼如下:
#include <iostream>
#include "tinyxml/tinyxml.h"
using namespace std;
int main()
{
// 新建的xml檔名字
string filename = "example.xml";
//////////////////////////////////////////////////// 新建一個xml檔案 ////////////////////////////////////////////////
// 定義一個TiXmlDocument類指標
TiXmlDocument* pWriteDoc = new TiXmlDocument();
// xml的宣告(三個屬性:版本,編碼格式,獨立檔案宣告)
TiXmlDeclaration* pDeclare = new TiXmlDeclaration("1.0", "UTF-8", "yes");
pWriteDoc->LinkEndChild(pDeclare); // 連線到最後
// 根節點
TiXmlElement* pRootElement = new TiXmlElement("telephonebook");
pWriteDoc->LinkEndChild(pRootElement); // 把根節點連線到最後
// 二級節點
TiXmlElement* pPersonElement = new TiXmlElement("person"); //通訊錄節點
pRootElement->LinkEndChild(pPersonElement); // 連線到根節點下
// 三級節點
TiXmlElement* pNameElement = new TiXmlElement("name");
// 文字
TiXmlText* nameContent = new TiXmlText("xiaoming"); // 通訊錄名字
pNameElement->LinkEndChild(nameContent); // 給三級節點新增文字
pPersonElement->LinkEndChild(pNameElement); // 把三級節點連線到二級節點下
// 三級節點
TiXmlElement* pAddrElement = new TiXmlElement("addr"); // 通訊錄地址
// 設定屬性
pAddrElement->SetAttribute("addr1","hubei");
pAddrElement->SetAttribute("addr2","wuhan");
pPersonElement->LinkEndChild(pAddrElement); // 把三級節點連線到二級節點下
// 三級節點
TiXmlElement* pEmailElement = new TiXmlElement("email");// 通訊錄郵件
// 文字
TiXmlText* emailContent = new TiXmlText(" [email protected]");
pEmailElement->LinkEndChild(emailContent); // 給三級節點新增文字
pPersonElement->LinkEndChild(pEmailElement);// 把三級節點連線到二級節點下
/////////////////////////////////////////////////// 儲存到檔案 ////////////////////////////////////////////////
pWriteDoc->SaveFile(filename.c_str());
printf( "new xml success, file's name is %s\n\n", filename.c_str());
//////////////////////////////////////////////////// 從檔案中讀取 ////////////////////////////////////////////////
// 定義一個TiXmlDocument類指標
TiXmlDocument* pReadDocument = new TiXmlDocument();
// 讀取檔案
if (!pReadDocument->LoadFile(filename.c_str()))
{
printf( "Could not load example xml file %s. Error='%s'\n", filename.c_str(),pReadDocument->ErrorDesc() );
return 0;
}
printf("read xml file success, file' name is %s \n\n",filename.c_str());
//讀取文件宣告資訊(第一個子節點轉換得到文件宣告)
TiXmlDeclaration* pDeclar = pReadDocument->FirstChild()->ToDeclaration();
if (pDeclar != NULL)
{
printf("read declare, version is %s , encoding is %s\n",pDeclar->Version(), pDeclar->Encoding());
}
// 得到檔案根節點
pRootElement = pReadDocument->RootElement();
//////////////////////////////////////////////////// 遍歷元素,列印 ////////////////////////////////////////////
printf("begin read all xml element \n\n");
// 遍歷所有的person
// 函式FirstChildElement() : 找到指定名字的元素
// 函式NextSiblingElement : 在同一級元素中查詢下一個指定名字的元素
int i = 0;
for (TiXmlElement* pItem = pRootElement->FirstChildElement("person"); pItem; pItem = pItem->NextSiblingElement("person"))
{
printf("read the %d person \n",++i);
// 名字
TiXmlElement* pName = pItem->FirstChildElement("name");
if (pName != NULL)
{
printf("the %d person's name = %s \n", i, pName->GetText());
}
// 地址
TiXmlElement* pAddr = pItem->FirstChildElement("addr");
if (pAddr != NULL)
{
// 第一個屬性
TiXmlAttribute* pAddr1 = pAddr->FirstAttribute();
if (pAddr1 != NULL)
{
printf("the %d person's addr1 = %s \n", i, pAddr1->Value());
// 下一個屬性
TiXmlAttribute* pAddr2 = pAddr1->Next();
if (pAddr2 != NULL)
{
printf("the %d person's addr2 = %s \n", i, pAddr2->Value());
}
}
}
printf("\n\n");
}
//////////////////////////////////////////////////// 刪除元素,屬性 ////////////////////////////////////////////
TiXmlElement* pPerson = pRootElement->FirstChildElement("person");
if (pPerson != NULL)
{
// 這裡演示刪除"email"元素,刪除其他節點也是一樣的辦法
TiXmlElement* pEmail = pPerson->FirstChildElement("email");
if (pEmail != NULL)
{
pPerson->RemoveChild(pEmail);
}
// 這裡演示修改"addr"元素
TiXmlElement* pAddr = pPerson->FirstChildElement("addr");
if (pAddr != NULL)
{
pAddr->SetAttribute("addr2", "huanggang"); // 修改屬性值
// 刪除屬性
//pAddr->RemoveAttribute("addr1");
}
}
////////////////////////////////////////////////////// 增加元素 ////////////////////////////////////////////////
// 新建一個元素,名字:person
TiXmlElement* pNewElement = new TiXmlElement("person");
// 給新建的元素建立子元素並連線到最後
TiXmlElement* pNameElementAdd = new TiXmlElement("name"); // 元素:name
TiXmlText* pNameText = new TiXmlText("zhangsan");
pNameElementAdd->LinkEndChild(pNameText); // 該元素下新增文字內容
TiXmlElement* pAddrElementAdd = new TiXmlElement("addr"); // 元素:addr
pAddrElementAdd->SetAttribute("addr1","guangdong");
pAddrElementAdd->SetAttribute("addr2","shenzhen"); // 該元素下新增屬性
TiXmlElement* pEmailElementAdd = new TiXmlElement("email"); // 元素:email
TiXmlText* pEmailText = new TiXmlText("[email protected]");
pEmailElementAdd->LinkEndChild(pEmailText); // 該元素下新增文字內容
// 都掛接到新建元素下
pNewElement->LinkEndChild(pNameElementAdd);
pNewElement->LinkEndChild(pAddrElementAdd);
pNewElement->LinkEndChild(pEmailElementAdd);
// 把這個新建元素掛在根節點最後
pRootElement->LinkEndChild(pNewElement);
printf("add new element success\n");
/////////////////////////////////////////////////// 再次儲存到檔案 ////////////////////////////////////////////////
if (pReadDocument->SaveFile(filename.c_str()))
{
printf("save file success\n");
}
getchar();
return 0;
}
五.Linux下的編譯
1. 從上面的地址下載得到tinyxml_2_6_2.zip檔案,執行解壓命令 unzip tinyxml_2_6_2.zip 得到資料夾tinyxml
2. 編譯成靜態庫
2.1 進入目錄tinyxml,用vim命令開啟Makefile檔案
2.2 將其中一行 OUTPUT := xmltest 修改為 OUTPUT := libtinyxml.a 表示編譯出的靜態庫檔名字為 libtinyxml.a
2.3 將其中一行 SRCS :=tinyxml.cpp tinyxml-parser.cpp xmltest.cpp tinyxmlerror.cpp tinystr.cpp 中的xmltest.cpp刪掉 因為不需要編譯該測試檔案
2.4 將其中一行 ${LD} -o [email protected] ${LDFLAGS} ${OBJS} ${LIBS} ${EXTRA_LIBS} 修改為 ${AR} [email protected] ${LDFLAGS} ${OBJS} ${LIBS} ${EXTRA_LIBS} 表示連結成靜態庫
2.5 將其中一行 xmltest.o:tinyxml.h tinystr.h 刪除,因為不需要編譯測試檔案
2.6 儲存Makefile檔案
2.7 回退到上一層目錄即目錄tinyxml中,執行make命令,即可在該目錄得到編譯出來的靜態庫檔案libtinyxml.a
3. 編譯成動態庫
3.1 進入目錄tinyxml,用vim命令開啟Makefile檔案
3.2 在其中一行 DEBUG_CFLAGS := -Wall -Wno-format -g -DDEBUG -fPIC 的末尾新增上 -fPIC 表示編譯與位置無關的程式碼,PIC的意思即 Position Independent Code,
3.3 在其中一行 RELEASE_CFLAGS := -Wall -Wno-unknown-pragmas -Wno-format -O3 的末尾新增上 -fPIC 原因同上
3.4 將其中一行 OUTPUT := xmltest 修改為 OUTPUT := libtinyxml.so 表示編譯出的動態庫檔名字為 libtinyxml.so
3.5 將其中一行 SRCS :=tinyxml.cpp tinyxml-parser.cpp xmltest.cpp tinyxmlerror.cpp tinystr.cpp 中的xmltest.cpp刪掉 因為不需要編譯該測試檔案
3.6 將其中一行${LD} -o [email protected] ${LDFLAGS} ${OBJS} ${LIBS} ${EXTRA_LIBS} 修改為 ${LD} -shared -o [email protected] ${LDFLAGS} ${OBJS} ${LIBS} ${EXTRA_LIBS} 表示連結成動態庫
3.7 將其中一行 xmltest.o:tinyxml.h tinystr.h 刪除,因為不需要編譯測試檔案
3.8 儲存Makefile檔案
3.9 回退到上一層目錄即目錄tinyxml中,執行make命令,即可在該目錄得到編譯出來的動態庫檔案libtinyxml.so
六.Linux下的使用
1. 程式碼與步驟四中windows下的程式碼完全相同,需編寫makefile,示例程式碼中有
2. linux下示例程式碼下載地址:(內有介紹文件,請按照文件步驟操作,保證可以執行成功)
相關推薦
Windows下caffe安裝詳解(僅CPU)
net library dad 新建 math 錯誤 format ack 訓練集 本文大多轉載自 http://blog.csdn.net/guoyk1990/article/details/52909864,加入部分自己實戰心得。 1、環境:windows 7\VS20
libevent在windows下使用步驟詳解
libevent是一個常用的網路庫,下面就看看在windows下面編譯測試的過程吧。一 環境 系統:win8.1 編譯器:VS2013 官方下載地址:http://libevent.org/ 版本:2.0.22-stable二 編譯靜態庫 1 解壓 把上面下載到libeve
Windows下caffe安裝詳解(cpu+gpu+matcaffe+pycaffe)
這篇博文是出於公司專案需要的考慮,才進行windows下caffe的相關開發。同時也在安裝完後及時進行總結,希望這篇博文可以幫助到大家! 需要準備的檔案: 1,VS2013,這個不再贅述 安裝過程: 1,將下載的caffe-windows.zip進行解壓,並進入其
windows下編譯及使用libevent
原文出自:http://www.cnblogs.com/luxiaoxun/p/3603399.html Libevent官網:http://libevent.org/ windows 7下編譯: 編譯環境: windows 7 + VS2010 (1)解壓lib
tinyxml在linux和windows下的編譯及使用詳解
一:摘要1.XML全稱EXtensible Markup Language,翻譯為可擴充套件標記語言,XML檔案通常就是一個文字檔案,可以使用任何編碼2.TinyXML是一個開源的C++用來處理XML的第三方庫 二:說明1. 2. 部落格內容及所有程式碼均是在該版本下編譯
windows命令行中java和javac、javap使用詳解(java編譯命令)
路徑 point 目錄 pan static article 字節碼 區別 string 如題,首先我們在桌面,開始->運行->鍵入cmd 回車,進入windows命令行。進入如圖所示的畫面: 可知,當前默認目錄為C盤Users文件夾下的Administr
windows安裝Jupyter Notebook Windows下的Python 3.6.1的下載與安裝(適合32bits和64bits)(圖文詳解)
這是我自定義的Python 的安裝目錄 (D:\SoftWare\Python\Python36\Scripts) 1、Jupyter Notebook 和 pip 為了更加方便地寫 Python 程式碼,還需要安裝 Jupyter notebook。 利用 pip 安裝
windows下mysql 5.7.24 的下載步驟和安裝配置方法圖文詳解
windows 下安裝mysql,供大家參考,具體內容如下 1.先下載好 mysql5.7.24 版本的安裝包,可以去mysql https://www.mysql.com/downloads/ 官網自己下載. 1.1
nginx-1.15.5 windows下 64位版本編譯過程詳解
編譯原始碼、工具、指令碼等和釋出在下面地址: 原始碼準備: 官網釋出的NGINX原始碼,不包含windows編譯部分,但是包含了主要的原始碼(片斷一): 下載地址:http://nginx.org/download/nginx-1.15.5.tar.gz windo
Windows下的Python 3.6.1的下載與安裝(適合32bits和64bits)(圖文詳解)
不多說,直接上乾貨! 為什麼,這麼簡單的一個python,我還要特意來寫一篇部落格呢? 是因為留念下,在使用了Anaconda2和Anaconda3的基礎上,現在需安裝python3.6.0來做資料分析。 關於資料分析工程師的,相關部落格,我會陸續更新
linux和windows下安裝python拓展包及requirement.txt安裝類庫
too tor == 引導 -cp mod flask utf addition http://blog.csdn.net/pipisorry/article/details/39902327python拓展包安裝直接安裝拓展包默認路徑:Unix(Linux)默認路徑:/
微信小程序 WXML、WXSS 和JS介紹及詳解
名單 獲取 hang href 直接 last 1.2 data sub 前幾天折騰了下。然後列出一些實驗結果,供大家參考。 百牛信息技術bainiu.ltd整理發布於博客園 0. 使用開發工具模擬的和真機差異還是比較大的。也建議大家還是真機調試比較靠譜。 1. WXML(
微信和支付寶支付模式詳解及實現二
配置 其余 logs https 朋友 一個 target 多租戶 對比 繼上篇《微信和支付寶支付模式詳解及實現》到現在已經有半年時間了,這期間不少朋友在公號留言支付相關的問題,最近正好也在處理公司支付相關的對接,打算寫這篇來做一個更進一步的介紹,同時根據主要的幾個支付
vscode基於Linux和Windows下c/c++的多文件編譯與連接
vscode c/c++ 有時寫寫小程序,又不想啟動2013,vscode就成了我的首選。剛接觸vscode的時候,跟著網上配置了一堆東西,總算能編譯C/C++了,但一涉及到多文件,我還得乖乖的打開vs2013。前些天在配置Linux上的vscode的時候,突然發現有網友在tasks.json
Apache服務簡介及編譯安裝詳解
Apache簡介 Apache編譯安裝詳解 Apache設置啟動腳本 Apache服務簡介及編譯安裝詳解一、Apache簡介Apache HTTP Server(簡稱Apache)是Apache軟件基金會的一個開放源碼的網頁服務器,是目前世界上使用最廣泛的一種web server,它以跨平臺,高效
Nginx服務簡介及編譯安裝詳解
nginx簡介 nginx編譯安裝步驟詳解 編寫Nginx啟動文件 Nginx服務簡介及編譯安裝詳解一、Nginx簡介 Nginx是一個自由、開源、高性能及輕量級的HTTP服務器及反向代理服務器,其性能與IMAP/POP3代理服務器相當。Nginx以其高性能、穩定、功能豐富、配置簡單及占用系
linux基礎3-磁碟和檔案系統相關 LINUX支援哪些檔案系統 linux下磁碟分割槽詳解 圖文(fdisk;mkfs)
一 dumpe2fs : 在Linux使用過程中,我們如果要了解檔案系統的配置情況,可以使用dumpe2fs檢視ext2/ext3/ext4格式的檔案系統資訊。 命令格式: dumpe2fs [選項] 裝置 常用選項: -h 僅列出超級塊中的資訊
LuaJIT2.1.0 beta3在Windows和OSX下編譯
上個月LuaJIT終於迎來了2.1.0 beta3版本的更新,2.1.0-beta3 除了各種修復之外,主要的新功能是在 GC64 模式下支援 x64 的 JIT 編譯器,ARM64 和 MIPS64。 LuaJIT2.1.0 beta2版本中解決了iOS的arm64不用再iP
Linux下的訊號詳解及捕捉訊號
訊號的基本概念 每個訊號都有一個編號和一個巨集定義名稱 ,這些巨集定義可以在 signal.h 中找到。 使用kill -l命令檢視系統中定義的訊號列表: 1-31是普通訊號 regular signal(非可靠訊號); 34-64是實時訊號 real time sign
Linux驅動靜態編譯和動態編譯方法詳解
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!