1. 程式人生 > >tinyxml在linux和windows下的編譯及使用詳解

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下示例程式碼下載地址:(內有介紹文件,請按照文件步驟操作,保證可以執行成功)

相關推薦

Windowscaffe安裝(僅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

Windowscaffe安裝(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在linuxwindows編譯使用

一:摘要1.XML全稱EXtensible Markup Language,翻譯為可擴充套件標記語言,XML檔案通常就是一個文字檔案,可以使用任何編碼2.TinyXML是一個開源的C++用來處理XML的第三方庫 二:說明1. 2. 部落格內容及所有程式碼均是在該版本下編譯

windows命令行中javajavac、javap使用(java編譯命令)

路徑 point 目錄 pan static article 字節碼 區別 string 如題,首先我們在桌面,開始->運行->鍵入cmd 回車,進入windows命令行。進入如圖所示的畫面: 可知,當前默認目錄為C盤Users文件夾下的Administr

windows安裝Jupyter Notebook Windows的Python 3.6.1的下載與安裝(適合32bits64bits)(圖文

    這是我自定義的Python 的安裝目錄 (D:\SoftWare\Python\Python36\Scripts) 1、Jupyter Notebook 和 pip   為了更加方便地寫 Python 程式碼,還需要安裝 Jupyter notebook。 利用 pip 安裝

windowsmysql 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的下載與安裝(適合32bits64bits)(圖文

  不多說,直接上乾貨!   為什麼,這麼簡單的一個python,我還要特意來寫一篇部落格呢?   是因為留念下,在使用了Anaconda2和Anaconda3的基礎上,現在需安裝python3.6.0來做資料分析。   關於資料分析工程師的,相關部落格,我會陸續更新

linuxwindows安裝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基於LinuxWindowsc/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在WindowsOSX編譯

  上個月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 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!