当前位置:首页 » 操作系统 » 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库,网络一下这个库,就有源码和很多示例,挺不错的开源库

热点内容
方舟怎么用自己的存档进入别人的服务器 发布:2025-05-14 16:46:25 浏览:875
微博视频高清上传设置 发布:2025-05-14 16:38:41 浏览:548
数据库图书管理设计 发布:2025-05-14 16:33:52 浏览:378
php开发的网页 发布:2025-05-14 16:22:03 浏览:477
服务器内存跑满了怎么回事 发布:2025-05-14 16:21:16 浏览:224
微信qq音乐缓存 发布:2025-05-14 16:16:16 浏览:469
c语言回收内存 发布:2025-05-14 16:16:08 浏览:144
2021国产安卓顶级旗舰买哪个 发布:2025-05-14 16:15:36 浏览:300
linux自学视频 发布:2025-05-14 16:14:49 浏览:256
我的世界服务器崩了重启 发布:2025-05-14 16:09:37 浏览:45