當前位置:首頁 » 操作系統 » tinyxml源碼

tinyxml源碼

發布時間: 2023-01-09 01:50:08

Ⅰ 求在VS或VC平台下可以編譯的開源軟體的源代碼,要一萬行左右的,最好為C或C++,拜託啦~

你看看CodePlex上面有沒有,或者CodeProject上面找找。
SourceForge上估計以開源編譯器通過的為主。
1.TinyXML
2.RapidXml

3.xerces

linux tinyxml2怎麼編譯

1.首先,要到官網上去把tinyxml庫下載下來,網址為:點擊打開鏈接:http://sourceforge.net/projects/tinyxml/

2.把下載的tinyxml庫解壓縮,我這里是解壓縮到/opt 目錄下

3.進入到解壓縮目錄下,我們會發現Tinyxml在Windows 下是使用微軟的VS 來生成的庫,因為其中有tinyxml.sln,tinyxml_lib.vcxproj,tinyxmlSTL.vcxproj等文件,當然,Tinyxml是開源的,所以它也有一個Makefile,用來生成Linux下的Tinyxml庫。整個Tinyxml源碼項目其實是由2個頭文件和一個4個C++源文件(.cpp)組成:tinystr.h,tinyxml.h,tinystr.cpp,tinyxml.cpp,tinyxmlerror.cpp,tinyxmlparser.cpp。其中還有一個xmltest.cpp文件,只是一個測試代碼,有興趣的話,大家可以打開研究它。好了,現在介紹怎麼修改它的Makefile:

(1)使用vim或者其他的編輯器打開Makefile文件

(2)將其中的注釋為Targets of the build的下一行OUTPUT := xmltest一行修改為:OUTPUT := libtinyxml.a
(3)將其中的注釋為Source files 的下一行SRCS:=tinyxml.cpp tinyxml-parser.cpp xmltest.cpp tinyxmlerror.cpp tinystr.cpp中的xmltest.cpp刪除,因為它只是一個測試源文件,不需要編譯。

(4)將其中的Output的下一行的${LD} -o $@ ${LDFLAGS} ${OBJS} ${LIBS} ${EXTRA_LIBS}修改為:${AR} $@ ${LDFLAGS} ${OBJS} ${LIBS} ${EXTRA_LIBS}。大致改成這樣

  1. ${OUTPUT}:${OBJS}
  2. ${AR}$@${LDFLAGS}${OBJS}${LIBS}${EXTRA_LIBS}
  3. #${LD}-o$@${LDFLAGS}${OBJS}${LIBS}${EXTRA_LIBS}
    (5)將Makefile的倒數第二行 xmltest.o:tinyxml.h tinystr.h,注釋掉,因為不需要將演示程序添加到靜態庫中。然後保存退出。

(6)在終端下進入Makefile所在目錄,執行make命令編譯,即可在Makefile所在目錄下生成libtinyxml.a文件。

4.接下來就可以使用這個靜態庫了:$ g++ -o xmltest xmltest.cpp libtinyxml.a 注意:將使用的靜態庫放在源文件後面即可,如果靜態庫文件不在當前目錄,應該使用它的絕對路徑或者用g++的參數-L來指定路徑,因為編譯器默認在當前目錄下先查找指定的庫文件。

修改後的Makefile (v 1.0.1) 記錄如下:

[plain] view plain print?

#****************************************************************************

#

#MakefileforTinyXmltest.

#LeeThomason

#www.grinninglizard.com

#

#ThisisaGNUmake(gmake)makefile

#****************************************************************************

#,orNOotherwise

DEBUG:=NO

#,orNOotherwise

PROFILE:=NO

#TINYXML_USE_.NO,thenSTL

#willnotbeused.YESwillincludetheSTLfiles.

TINYXML_USE_STL:=NO

#****************************************************************************

CC:=gcc

CXX:=g++

LD:=g++

AR:=arrc

RANLIB:=ranlib

DEBUG_CFLAGS:=-Wall-Wno-format-g-DDEBUG

RELEASE_CFLAGS:=-Wall-Wno-unknown-pragmas-Wno-format-O3

LIBS:=

DEBUG_CXXFLAGS:=${DEBUG_CFLAGS}

RELEASE_CXXFLAGS:=${RELEASE_CFLAGS}

DEBUG_LDFLAGS:=-g

RELEASE_LDFLAGS:=

ifeq(YES,${DEBUG})

CFLAGS:=${DEBUG_CFLAGS}

CXXFLAGS:=${DEBUG_CXXFLAGS}

LDFLAGS:=${DEBUG_LDFLAGS}

else

CFLAGS:=${RELEASE_CFLAGS}

CXXFLAGS:=${RELEASE_CXXFLAGS}

LDFLAGS:=${RELEASE_LDFLAGS}

endif

ifeq(YES,${PROFILE})

CFLAGS:=${CFLAGS}-pg-O3

CXXFLAGS:=${CXXFLAGS}-pg-O3

LDFLAGS:=${LDFLAGS}-pg

endif

#****************************************************************************

#Preprocessordirectives

#****************************************************************************

ifeq(YES,${TINYXML_USE_STL})

DEFS:=-DTIXML_USE_STL

else

DEFS:=

endif

#****************************************************************************

#Includepaths

#****************************************************************************

#INCS:=-I/usr/include/g++-2-I/usr/local/include

INCS:=

#****************************************************************************

#

#****************************************************************************

CFLAGS:=${CFLAGS}${DEFS}

CXXFLAGS:=${CXXFLAGS}${DEFS}

#****************************************************************************

#Targetsofthebuild

#****************************************************************************

OUTPUT:=libtinyxml.a

all:${OUTPUT}

#****************************************************************************

#Sourcefiles

#****************************************************************************

SRCS:=tinyxml.cpptinyxmlparser.cpptinyxmlerror.cpptinystr.cpp

#Addonthesourcesforlibraries

SRCS:=${SRCS}

OBJS:=$(addsuffix.o,$(basename${SRCS}))

#****************************************************************************

#Output

#****************************************************************************

${OUTPUT}:${OBJS}

${AR}$@${LDFLAGS}${OBJS}${LIBS}${EXTRA_LIBS}

#${LD}-o$@${LDFLAGS}${OBJS}${LIBS}${EXTRA_LIBS}

#****************************************************************************

#commonrules

#****************************************************************************

#

%.o:%.cpp

${CXX}-c${CXXFLAGS}${INCS}$<-o$@

%.o:%.c

${CC}-c${CFLAGS}${INCS}$<-o$@

dist:

bashmakedistlinux

clean:

-rm-fcore${OBJS}${OUTPUT}

depend:

#makedepend${INCS}${SRCS}

tinyxml.o:tinyxml.htinystr.h

tinyxmlparser.o:tinyxml.htinystr.h

tinyxmlerror.o:tinyxml.htinystr.h

Ⅲ MFC中用Tinyxml處理xml文件並顯示內容

使用Tinyxml創建和讀取XML文件的優點:1,可在Windows和Linux中使用;2,方便易學,易用,可在http://sourceforge.net/projects/tinyxml/獲取源代碼。
將其中的文件tinystr.h,tinyxml.h,tinystr.cpp,tinyxmlerror.cpp,tinyxmlparser.cpp和tinyxml.cpp拷貝到您的工程目錄,即可方便使用。

Ⅳ 如何在CentOS上安裝並漢化Code:Blocks

安裝步驟

一、安裝wxWidgets

1.下載wxWidgets源碼包,地址:http://www.wxwidgets.org/downloads/
2.解壓。可以使用tar命令,CentOS里也可以直接用滑鼠右鍵操作
3.進入解壓後的目錄,打開終端,依次輸入以下命令
./configure (最好不要加上prefix參數,使用默認設置會比較有利於後面步驟的順利推進)
make (編譯。此過程相當漫長,可以打兩盤鬥地主再回來)
make install (安裝。)
安裝完成後,終端輸出如下提示:
The installation of wxWidgets is finished. On certain
platforms (e.g. Linux) you'll now have to run ldconfig
if you installed a shared library and also modify the
LD_LIBRARY_PATH (or equivalent) environment variable.
這是說需要設置環境變數LD_LIBRAY_PATH(環境變數的作用是告訴系統尋找wxWidgets開發庫該去的路徑。因為操作系統的邏輯是,如果在我認為該去的路徑沒找到的我要的東西的話,我就會認為那個東西木有安裝),暫不關閉本大步中打開的終端。

二、設定環境變數LD_LIBRAY_PATH

參考鏈接:

ldconfig及 LD_LIBRARY_PATH http://www.linuxidc.com/Linux/2011-10/45744.htm
Linux環境變數修改和設置 http://www.linuxidc.com/Linux/2012-12/75495.htm
Linux export 命令 http://www.linuxidc.com/Linux/2012-10/72746.htm

依據上一大步最後得到的提示信息,綜合參考資料,我們作出以下操作,

1.仍在第一大步打開的終端,不改變目錄,輸入以下命令:
ldconfig (這完全是根據第一步最後的提示信息來的)
export -p (查看系統當前環境變數的值,此步僅為了和設置後的效果作對比,可省略)
可以看到現在,LD_LIBRAY_PATH的值是空的(結果中沒有此項的存在)。
2.繼續輸入命令:
./wx-config --libs
得到結果(安裝目錄不同結果會有小差異):
-L/root/Desktop/wxWidgets-2.8.12/lib
-pthread -Wl,-rpath,/root/Desktop/wxWidgets-2.8.12/lib
-lwx_gtk2_richtext-2.8 -lwx_gtk2_aui-2.8 -lwx_gtk2_xrc-2.8
-lwx_gtk2_qa-2.8 -lwx_gtk2_html-2.8 -lwx_gtk2_adv-2.8 -lwx_gtk2_core-2.8
-lwx_base_xml-2.8 -lwx_base_net-2.8 -lwx_base-2.8
3.在/etc目錄下找到文件profile,打開它,在裡面添加以下命令:
export LD_LIBRARY_PATH="…………"
引號里的內容為上一小步「./wx-config --libs」的執行結果。export命令用於編輯環境變數,如果你不知道該加在什麼位置,請在文件中隨意另找一條export命令,跟在他後面即可。保存profile文件。
4.還是在前面打開的終端,繼續輸入命令:
source /etc/profile (在不用重啟系統的情況下使profile修改的內容生效)
export -p (查看系統當前環境變數的值)
這回可以看到,LD_LIBRAY_PATH的值被成功設定為第2小步里「./wx-config --libs」的執行結果。

三、安裝codeblocks

1.下載codeblocks源碼包,地址:http://www.codeblocks.org/downloads/
2.解壓。
3.進入解壓後的目錄,打開新的終端,依次輸入以下命令
./configure --prefix=/usr/local/codeblocks (prefix參數用以指定安裝路徑。如果跳過了第二大步,則在此會得到沒有安裝wxWidgets的提示)
make (編譯。額,咱們繼續鬥地主……)
make install (安裝。)

OK,至此,Code::Blocks安裝圓滿完成。在任意目錄下打開終端,直接執行codeblocks命令即可運行Code::Blocks。

四、codeblocks漢化

1.下載codeblocks的漢化包,地址:

免費下載地址在 http://linux.linuxidc.com/

用戶名與密碼都是www.linuxidc.com

具體下載目錄在 /2014年資料/2月/5日/Hadoop公平調度器指南 PDF

下載方法見 http://www.linuxidc.com/Linux/2013-07/87684.htm

2.在/usr/share/ 或者/usr/local/share/
目錄下(看你在第三大步中是怎麼指定的prefix參數)找到codeblocks目錄(內含icons、images、lexers、scripts等
資源目錄以及一些壓縮包),並在該目錄下建立一個子文件夾:locale(注意 locale
全為小寫字母)。如果找不到,請看步驟3,否則直接看步驟4。
3.在桌面上打開終端,運行命令:locate codeblocks >codeblocks 。運行完畢後,在桌面生成了一個名為codeblocks的文件,打開該文件,從中找到codeblocks目錄所在的路徑。
4.將所下載的壓縮包解壓到第2步創建的locale目錄下,則locale目錄下應出現zh_CN子目錄,內有一個名為codeblocks.mo的文件。
5.
啟動Code::Blocks,點擊主菜單的「Settings」,選擇「Enviornment」。出現的對話框中,左邊選中「View」,右邊打勾
「Internationalization (needs restart)」,並在後面的復合框中選中「Chinese
(Simplified)」。確認退出本對話框。
6.重啟Code::Blocks。再看到的應該是中文簡體界面了。

主要糾結的問題

1.最早下了一套rpm包,然後在安裝到第四個包,libtinyxml0,的時候出現了包依賴問題:
error: Failed dependencies:
libstdc++.so.6(GLIBCXX_3.4.9) is needed by libtinyxml0-2.6.1-9.1.2.i586
rpmlib(PayloadIsLzma) <= 4.4.6-1 is needed by libtinyxml0-2.6.1-9.1.2.i586
這個問題困擾了我很久,搜了很多文檔來看都木有解決,最後就放棄了。歡迎知道怎麼辦的請給我留言,謝謝!
據資源的上傳者說,在OpenSUSE Linux下測試通過。如果你也使用這個系統,可以去這個鏈接看看:http://www.linuxidc.com/Linux/2014-02/97367.htm

2.根據看到的資料,我在安裝完wxWidgets之後直接安裝codeblocks,結果終端報錯,
configure: error:
wxWidgets must be installed on your system
but the wx-config script couldn't be found.
Please check that wx-config is in path, the directory
where wxWidgets libraries are installed (returned by
'wx-config --libs' command) is in LD_LIBRARY_PATH or
equivalent variable and wxWidgets version is 2.8.0 or above.
但是我明明已經安好了wxwidgets啊!找了好多資料,試了好多方法,都木有解決。後來仔細閱讀了wxwidgets安裝成功後的提示信息,拿來和codeblocks安裝初始化的報錯信息比對,才終於找到了症結所在:環境變數設置。
基本我看到的所有資料都沒提這個問題,但他確實很重要。由此我得到的結論是,網上資料固然多,按部就班問題亦多。若要順順利利,還請多看系統提示。

順手牽羊

1./etc/ld.so.conf
這個文檔記錄了編譯時使用的動態鏈接庫的路徑。默認情況下,編譯器只會使用/lib和/usr/lib
這兩個目錄下的庫文檔,如果想往上面兩個目錄以外加東西的時候,就需要在etc/ld.so.conf.d目錄下添加一個conf文件,把新路徑加進去,
然後再調用ldconfig。
又有一些文獻說,如果想往上面兩個目錄以外加東西的時候,一定要修改/etc/ld.so.conf文件,不然會系統找不到新庫。看完後我茫然了,後來我打開了ld.so.conf文件,裡面內容如下:
include ld.so.conf.d/*.conf
看完,我突然就懂了。
2.wxWidgets與wxGTK
wxwidgets 是一個c++編寫的用來提供gui開發的框架。它包含一個可以支持現今幾乎所有操作系統的GUI庫。而適用於Linux系統的就是wxGTK,Windows平台下的則叫做wxMSW。
3.使用tar命令時,壓縮包不能有「(」等非法符號

Ⅳ C語言xml解析

把所有的數據當做一個字元串
收到數據後先strstr(buffer,"<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
如果返回的是NULL則表示沒有這段 退出
buffer是你收到的數據起始地址

Ⅵ vs2012 mfc 使用TinyXml的問題

預編譯頭的文件。在工程屬性中去掉預編譯頭這個選項。

Ⅶ 如何利用tinyxml操縱xml及注意問題

創建的格式如下:

復制代碼 代碼如下:

<Persons>
<Person>
<name>lhy</name>
<age>22</age>
</Person>
</Persons>

上篇博客中,我們也介紹了tinyxml解析器中的所有的類以及類之間的關系。
創建上述格式的xml,代碼如下:

復制代碼 代碼如下:

//創建一個XML的文檔對象。
TiXmlDocument *myDocument = new TiXmlDocument();
//創建一個根元素並連接。
TiXmlElement *RootElement = new TiXmlElement("Persons");
myDocument->LinkEndChild(RootElement);
//創建一個Person元素並連接。
TiXmlElement *PersonElement = new TiXmlElement("Person");
RootElement->LinkEndChild(PersonElement);
//創建name元素、age元素並連接。
TiXmlElement *NameElement = new TiXmlElement("name");
TiXmlElement *AgeElement = new TiXmlElement("age");
PersonElement->LinkEndChild(NameElement);
PersonElement->LinkEndChild(AgeElement);
//設置name元素和age元素的內容並連接。
TiXmlText *NameContent = new TiXmlText("lhy");
TiXmlText *AgeContent = new TiXmlText("22");
NameElement->LinkEndChild(NameContent);
AgeElement->LinkEndChild(AgeContent);
myDocument->SaveFile("d:\\lhy\\xml.txt");//保存到文件

只要搞清xml中節點之間的關系,創建不是問題。說白了就是一種輩分關系。
創建搞定了,但是作為C++程序猿,寫完之後,總感覺有點別扭,總感覺哪不對勁。你是否也看出其中存在的貓膩?
對了,些許的代碼中有大量的New指針。在C++中可沒有java中的垃圾回收機制,必須自己來處理這些廢棄的垃圾。但是代碼中卻沒有Delete語句?
上網查了資料,發現很多創建代碼中,都沒有Delete語句?難道是大家都是復制粘貼?還是tinyxml在搞怪?
我總結了以下幾點,但是最後在開發的過程中仍是疑問,但是開發的過程中,沒有出現問題,所以我的程序就暫時如此了。
說法一:很多文章中,都是new沒有delete,是因為tinyxml可以自動釋放,自動銷毀指針,無需開發者手動釋放。
質疑:new出來的可以自動釋放?new出來說明是在堆上創建的,什麼時候會自動釋放?程序結束時,自動釋放?那怎麼判斷程序結束呢?(在一個模塊中如何析構另一個模塊中的內存區域,我們後面會詳談),所以這種說法不攻自破。
既然tinyxml中有自毀功能,那我們查詢其源代碼,發現果真如此,tinyxml中在析構函數中,有相應的指針釋放。但是並不是每個節點如此的。
源碼中的詳情:

復制代碼 代碼如下:

TiXmlNode::~TiXmlNode()
{
TiXmlNode* node = firstChild;
TiXmlNode* temp = 0;
while ( node )
{
temp = node;
node = node->next;
delete temp;
}
}
void TiXmlNode::Clear()
{
TiXmlNode* node = firstChild;
TiXmlNode* temp = 0;
while ( node )
{
temp = node;
node = node->next;
delete temp;
}
firstChild = 0;
lastChild = 0;
}

我們也知道tinyxml中的類之間存在繼承關系。
那我們看tinyxml中的TixmlElement類:

復制代碼 代碼如下:

TiXmlElement::~TiXmlElement()
{
ClearThis();
}
void TiXmlElement::ClearThis()
{
Clear();
while( attributeSet.First() )
{
TiXmlAttribute* node = attributeSet.First();
attributeSet.Remove( node );
delete node;
}
}

因為TixmlElement是繼承TiXmlNode.但是在TiXmlDocument中並沒有發現TiXmlDocument類的析構函數。
第二種說法:TiXmlDocument對象就是這棵樹的根結點,
在一個完整的文檔中, 除了它, 其餘結點必須都是它的後代, 所以TinyXml用了一個很巧妙的方法來析構每一個結點所對應的對象 ----
每個結點的析構任務都委託給了它的父親, 這樣只要保證父親被正確析構, 或者調用了父親的Clear函數, 它的所有後代都會被正確的析構,
所以對整個文檔來說只要TiXmlDocument對象被正確析構即可。
在創建的上述代碼中,我們發現,所有的節點都是掛在根節點之下的。
其實這句代碼: myDocument->LinkEndChild(RootElement);使用了多態方式。類之間的關系如下:

並且LinkEndChild源代碼如下:它是父類TiXmlNode中的方法

復制代碼 代碼如下:

TiXmlNode* TiXmlNode::LinkEndChild( TiXmlNode* node )
{
assert( node->parent == 0 || node->parent == this );
assert( node->GetDocument() == 0 || node->GetDocument() == this->GetDocument() );
if ( node->Type() == TiXmlNode::DOCUMENT )
{
delete node;
if ( GetDocument() ) GetDocument()->SetError( TIXML_ERROR_DOCUMENT_TOP_ONLY, 0, 0, TIXML_ENCODING_UNKNOWN );
return 0;
}
node->parent = this;
node->prev = lastChild;
node->next = 0;
if ( lastChild )
lastChild->next = node;
else
firstChild = node;// it was an empty list.
lastChild = node;
return node;
}

這樣的話:則只要刪除根節點,在程序中myDocument,就相當於把刪除了TiXmlNode,相當於調用了TiXmlNode的析構函數。
質疑:網上說這種方式,析構是從葉子到樹根。根據TiXmlNode中的析構函數,我們可以得出,是從樹根到葉子。
但是我們在Delete myDocument時,應該注意一點:
創建文檔時,也就是程序段中的myDocument。若是從堆上創建,則需需要手動釋放。如我們上述的片段中,就是在堆上創建的。
TiXmlDocument *myDocument=new TiXmlDocument ();
若是從棧上創建,則不須我們手動釋放,而是程序自動調用析構函數。同時我們應該注意,其他的元素必須在堆上創建。因為在TiXmlNode析構函數中,是delete的,但是棧上的東東是不須delete,所以除了根節點之外連接的後代節點是必須從堆上創建。
經過我們解釋,明白tinyxml中的原理了嗎?只要理解了tinyxml中的類的作用以及類之間的關系,看源碼是沒問題滴哦。
這篇博客根據創建xml小demo解釋了其中存在的疑問。那下篇博客中我們會根據解析xml來答疑解析中存在的問題。

Ⅷ vc++ 修改皮膚庫xml修改後怎麼生效

vc++ 修改皮膚庫xml修改後怎麼生效
建議你用tinyxml庫,網路一下這個庫,就有源碼和很多示例,挺不錯的開源庫

熱點內容
微信qq音樂緩存 發布:2025-05-14 16:16:16 瀏覽:468
c語言回收內存 發布:2025-05-14 16:16:08 瀏覽:143
2021國產安卓頂級旗艦買哪個 發布:2025-05-14 16:15:36 瀏覽:300
linux自學視頻 發布:2025-05-14 16:14:49 瀏覽:255
我的世界伺服器崩了重啟 發布:2025-05-14 16:09:37 瀏覽:44
android深拷貝 發布:2025-05-14 16:09:35 瀏覽:153
cf電腦版轉伺服器神器還在嗎 發布:2025-05-14 16:09:02 瀏覽:211
百度文庫伺服器如何搭建 發布:2025-05-14 16:09:00 瀏覽:248
安卓微信刪除的好友怎麼找回 發布:2025-05-14 16:08:56 瀏覽:706
iphone的訪問限制密碼忘記了怎麼辦 發布:2025-05-14 16:08:56 瀏覽:184