TinyXML252中文文档Word格式.docx

上传人:b****5 文档编号:20470842 上传时间:2023-01-23 格式:DOCX 页数:10 大小:25.01KB
下载 相关 举报
TinyXML252中文文档Word格式.docx_第1页
第1页 / 共10页
TinyXML252中文文档Word格式.docx_第2页
第2页 / 共10页
TinyXML252中文文档Word格式.docx_第3页
第3页 / 共10页
TinyXML252中文文档Word格式.docx_第4页
第4页 / 共10页
TinyXML252中文文档Word格式.docx_第5页
第5页 / 共10页
点击查看更多>>
下载资源
资源描述

TinyXML252中文文档Word格式.docx

《TinyXML252中文文档Word格式.docx》由会员分享,可在线阅读,更多相关《TinyXML252中文文档Word格式.docx(10页珍藏版)》请在冰豆网上搜索。

TinyXML252中文文档Word格式.docx

它无法做些什么

TinyXML不解析不使用DTDs(文档类型定义)或者XSLs(可扩展样式表语言)。

有其它解析器(到www.sourceforge.org搜索一下XML)具有更加全面的特性,但它们也就更大,需要花更长的时间来建立你的项目,有更陡的学习曲线,而且经常有一个更严格的许可协议。

如果你是用于浏览器或者有更复杂的XML需要,那么TinyXML不适合你。

下面的DTD语法在TinyXML里是不做解析的:

<

!

DOCTYPEArchiv[

ELEMENTComment(#PCDATA)>

]>

因为TinyXML把它看成是一个带着非法嵌入!

ELEMENT结点的!

DOCTYPE结点。

或许这在将来会得到支持。

指南

有耐性些,这是一份能很好地指导你怎么开始的指南,它(非常短小精悍)值得你花时间完整地读上一遍。

∙TinyXML指南

代码状况

TinyXML是成熟且经过测试的代码,非常健壮。

如果你发现了漏洞,请提交漏洞报告到sourcefore网站上(我们会尽快修正。

有些地方可以让你得到提高,如果你对TinyXML的工作感兴趣的话可以上sourceforge查找一下。

相关项目

你也许会觉得TinyXML很有用!

(简介由项目提供)

∙TinyXPath().TinyXPath是一个小巧的XPath语法译码器脚本,用C++写成。

∙TinyXML++(TinyXML++是一个全新的TinyXML接口,使用了许多诸如模板,异常处理和更好的错误处理这些C++强项技术。

特性

使用STL

TinyXML可以被编译成使用或不使用STL。

如果使用STL,TinyXML会使用std:

:

string类,而且完全支持std:

istream,std:

ostream,operator<

和operator>

>

许多API方法都有‘constchar*’和’conststd:

string&

’两个版本。

如果被编译成不使用STL,则任何STL都不会被包含。

所有string类都由TinyXML它自己实现。

所有API方法都只提供’constchar*’传入参数。

使用运行时定义:

TIXML_USE_STL

来编译成不同的版本。

这可以作为参数传给编译器或者在“tinyxml.h”文件的第一行进行设置。

注意:

如果在Linux上编译测试代码,设置环境变量TINYXML_USE_STL=YES/NO可以控制STL的编译。

而在Windows上,项目文件提供了STL和非STL两种目标文件。

在你的项目中,在tinyxml.h的第一行添加"

#defineTIXML_USE_STL"

应该是最简单的。

UTF-8

TinyXML支持UTF-8,所以可以处理任何语言的XML文件,而且TinyXML也支持“legacy模式”——一种在支持UTF-8之前使用的编码方式,可能最好的解释是“扩展的ascii”。

正常情况下,TinyXML会检测出正确的编码并使用它,然而,通过设置头文件中的TIXML_DEFAULT_ENCODING值,TinyXML可以被强制成总是使用某一种编码。

除非以下情况发生,否则TinyXML会默认使用Legacy模式:

1.如果文件或者数据流以非标准但普遍的"

UTF-8引导字节"

(0xef0xbb0xbf)开始,TinyXML会以UTF-8的方式来读取它。

2.如果包含有encoding="

UTF-8"

的声明被读取,那么TinyXML会以UTF-8的方式来读取它。

3.如果读取到没有指定编码方式的声明,那么TinyXML会以UTF-8的方式来读取它。

4.如果包含有encoding=“其它编码”的声明被读取,那么TinyXML会以Legacy模式来读取它。

在Legacy模式下,TinyXML会像以前那样工作,虽然已经不是很清楚这种模式是如何工作的了,但旧的内容还得保持能够运行。

5.除了上面提到的情况,TinyXML会默认运行在Legacy模式下。

如果编码设置错误或者检测到错误会发生什么事呢?

TinyXML会尝试跳过这些看似不正确的编码,你可能会得到一些奇怪的结果或者乱码,你可以强制TinyXML使用正确的编码模式。

通过使用LoadFile(TIXML_ENCODING_LEGACY)或者LoadFile(filename,TIXML_ENCODING_LEGACY),你可以强制TinyXML使用Legacy模式。

你也可以通过设置TIXML_DEFAULT_ENCODING=TIXML_ENCODING_LEGACY来强制一直使用Legacy模式。

同样的,你也可以通过相同的方法来强制设置成TIXML_ENCODING_UTF8。

对于使用英文XML的英语用户来说,UTF-8跟low-ASCII是一样的。

你不需要知道UTF-8或者一点也不需要修改你的代码。

你可以把UTF-8当作是ASCII的超集。

UTF-8并不是一种双字节格式,但它是一种标准的Unicode编码!

TinyXML当前不使用或者直接支持wchar,TCHAR,或者微软的_UNICODE。

"

Unicode"

这个术语被普遍地认为指的是UTF-16(一种unicode的宽字节编码)是不适当的,这是混淆的来源。

对于“high-ascii”语言来说——几乎所有非英语语言,只要XML被编码成UTF-8,TinyXML就能够处理。

说起来可能有点微妙,比较旧的程序和操作系统趋向于使用“默认”或者“传统”的编码方式。

许多应用程序(和几乎所有现在的应用程序)都能够输出UTF-8,但是那些比较旧或者难处理的(或者干脆不能使用的)系统还是只能以默认编码来输出文本。

比如说,日本的系统传统上使用SHIFT-JIS编码,这种情况下TinyXML就无法读取了。

但是一个好的文本编辑器可以导入SHIFT-JIS的文本然后保存成UTF-8编码格式的。

Skew.orglink上关于转换编码的话题做得很好。

测试文件“utf8test.xml”包含了英文、西班牙文、俄文和简体中文(希望它们都能够被正确地转化)。

“utf8test.gif”文件是从IE上截取的XML文件快照。

请注意如果你的系统上没有正确的字体(简体中文或者俄文),那么即使你正确地解析了也看不到与GIF文件上一样的输出。

同时要注意在一个西方编码的控制台上(至少我的Windows机器是这样),Print()或者printf()也无法正确地显示这个文件,这不关TinyXML的事——这只是操作系统的问题。

TinyXML没有丢掉或者损坏数据,只是控制台无法显示UTF-8而已。

实体

TinyXML认得预定义的特殊“字符实体”,即:

&

amp;

&

lt;

<

gt;

>

quot;

"

apos;

这些在XML文档读取时都会被辨认出来,并会被转化成等价的UTF-8字符。

比如下面的XML文本:

Far&

Away

从TiXmlText对象查询出来时会变成"

Away"

这样的值,而写回XML流/文件时会以“&

”的方式写回。

老版本的TinyXML“保留”了字符实体,而在新版本中它们会被转化成字符串。

另外,所有字符都可以用它的Unicode编码数字来指定,"

#xA0;

和"

#160;

都表示不可分的空格字符。

打印

TinyXML有几种不同的方式来打印输出,当然它们各有各的优缺点。

∙Print(FILE*):

输出到一个标准C流中,包括所有的C文件和标准输出。

o"

相当漂亮的打印"

但你没法控制打印选项。

o输出数据直接写到FILE对象中,所以TinyXML代码没有内存负担。

o被Print()和SaveFile()调用。

∙operator<

输出到一个c++流中。

o与C++iostreams集成在一起。

o在"

networkprinting"

模式下输出没有换行符,这对于网络传输和C++对象之间的XML交换有好处,但人很难阅读。

∙TiXmlPrinter:

输出到一个std:

string或者内存缓冲区中。

oAPI还不是很简练。

o将来会增加打印选项。

o在将来的版本中可能有些细微的变化,因为它会被改进和扩展。

设置了TIXML_USE_STL,TinyXML就能支持C++流(operator<

,>

)和C(FILE*)流。

但它们之间有些差异你需要知道:

C风格输出:

∙基于FILE*

∙用Print()和SaveFile()方法

生成具有很多空格的格式化过的输出,这是为了尽可能让人看得明白。

它们非常快,而且能够容忍XML文档中的格式错误。

例如一个XML文档包含两个根元素和两个声明仍然能被打印出来。

C风格输入:

∙用Parse()和LoadFile()方法

速度快,容错性好。

当你不需要C++流时就可以使用它。

C++风格输出:

∙基于std:

ostream

生成压缩过的输出,目的是为了便于网络传输而不是为了可读性。

它可能有些慢(可能不会),这主要跟你系统上ostream类的实现有关。

无法容忍格式错误的XML:

此文档只能包含一个根元素。

另外根级别的元素无法以流形式输出。

C++风格输入:

istream

∙operator>

从流中读取XML使其可用于网络传输。

通过些小技巧,它知道当XML文档读取完毕时,流后面的就一定是其它数据了。

TinyXML总假定当它读取到根结点后XML数据就结束了。

换句话说,那些具有不止一个根元素的文档是无法被正确读取的。

另外还要注意由于STL的实现和TinyXML的限制,operator>

会比Parse慢一些。

空格

对是保留还是压缩空格这一问题人们还没达成共识。

举个例子,假设‘_’代表一个空格,对于"

Hello____world"

,HTML和某些XML解析器会解释成"

Hello_world"

,它们压缩掉了一些空格。

而有些XML解析器却不会这样,它们会保留空格,于是就是“Hello____world”(记住_表示一个空格)。

其它的还建议__Hello___world__应该变成Hello___world。

这是一个解决得不能让我满意的问题。

TinyXML一开始就两种方式都支持。

调用TiXmlBase:

SetCondenseWhiteSpace(bool)来设置你想要的结果,默认是压缩掉多余的空格。

如果想要改变默认行为,你应该在解析任何XML数据之前调用TiXmlBase:

SetCondenseWhiteSpace(bool),而且我不建议设置之后再去改动它。

句柄

想要健壮地读取一个XML文档,检查方法调用后的返回值是否为null是很重要的。

一种安全的检错实现可能会产生像这样的代码:

TiXmlElement* 

root 

document.FirstChildElement( 

Document"

 

);

if 

( 

{

element 

root->

FirstChildElement( 

Element"

child 

element->

Child"

child2 

child->

NextSiblingElement( 

// 

Finally 

do 

something 

useful.

用句柄的话就不会这么冗长了,使用TiXmlHandle类,前面的代码就会变成这样:

TiXmlHandle 

docHandle( 

document 

docHandle.FirstChild( 

).FirstChild( 

).Child( 

 

).ToElement();

useful

这处理起来容易多了。

查阅TiXmlHandle可以得到更多的信息。

行列追踪

对于某些应用程序来说,能够追踪节点和属性在它们源文件中的原始位置是很重要的。

另外,知道解析错误在源文件中的发生位置可以节省大量时间。

TinyXML能够追踪所有结点和属性在文本文件中的行列原始位置。

TiXmlBase:

Row()和TiXmlBase:

Column()方法返回结点在源文件中的原始位置。

正确的制表符号可以经由TiXmlDocument:

SetTabSize()来配置。

使用与安装

编译与运行xmltest:

提供了一个LinuxMakefile和一个WindowsVisualC++.dsw文件。

只需要简单地编译和运行,它就会在你的磁盘上生成demotest.xml文件并在屏幕上输出。

它还尝试用不同的方法遍历DOM并打印出结点数。

那个Linuxmakefile很通用,可以运行在很多系统上——它目前已经在mingw和MacOSX上测试过。

你不需要运行‘makedepend’,因为那些依赖关系已经硬编码在文件里了。

用于VC6的Windows项目文件

∙tinyxml:

tinyxml库,非STL

∙tinyxmlSTL:

tinyxml库,STL

∙tinyXmlTest:

用于测试的应用程序,非STL

∙tinyXmlTestSTL:

用于测试的应用程序,STL

Makefile

在makefile的顶部你可以设置:

PROFILE,DEBUG,和TINYXML_USE_STL。

makefile里有具体描述。

在tinyxml目录输入“makeclean”然后“make”,就可以生成可执行的“xmltest”文件。

在某一应用程序中使用:

把tinyxml.cpp,tinyxml.h,tinyxmlerror.cpp,tinyxmlparser.cpp,tinystr.cpp,和tinystr.h添加到你的项目和makefile中。

就这么简单,它可以在任何合理的C++适用系统上编译。

不需要为TinyXML打开异常或者运行时类型信息支持。

TinyXML怎么工作

举个例子可能是最好的办法,理解一下:

?

xmlversion="

1.0"

standalone=no>

–Ourtodolistdata–>

ToDo>

Itempriority="

1"

Gotothe<

bold>

Toystore!

/bold>

/Item>

2"

Dobills<

/ToDo>

它称不上是一个ToDo列表,但它已经足够了。

像下面这样读取并解析这个文件(叫“demo.xml”)你就能创建一个文档:

TiXmlDocument 

doc( 

demo.xml"

doc.LoadFile();

现在它准备好了,让我们看看其中的某些行和它们怎么与DOM联系起来。

第一行是一个声明,它会转化成TiXmlDeclaration类,同时也是文档结点的第一个子结点。

这是TinyXML唯一能够解析的指令/特殊标签。

一般来说指令标签会保存在TiXmlUnknown以保证在它保存回磁盘时不会丢失这些命令。

这是一个注释,会成为一个TiXmlComment对象。

ToDo"

标签定义了一个TiXmlElement对象。

它没有任何属性,但包含另外的两个元素。

生成另一个TiXmlElement对象,它是“ToDo”元素的子结点。

此元素有一个名为“priority”和值为“1”的属性。

Gotothe

TiXmlText,这是一个叶子结点,它不能再包含其它结点,是"

Item"

TiXmlElement的子结点。

另一个TiXmlElement,这也是“Item”元素的子结点。

等等

最后,看看整个对象树:

TiXmlDocument"

TiXmlDeclaration"

version=’1.0′"

standalone=no"

TiXmlComment"

Ourtodolistdata"

TiXmlElement"

Attribtutes:

priority=1

TiXmlText"

Gotothe"

bold"

Attributes:

priority=2

Dobills"

文档

本文档由Doxygen使用‘dox’配置文件生成。

许可证

TinyXML基于zlib许可证来发布:

本软件按“现状”提供(即现在你看到的样子),不做任何明确或隐晦的保证。

由使用此软件所引起的任何损失都决不可能由作者承担。

只要遵循下面的限制,就允许任何人把这软件用于任何目的,包括商业软件,也允许修改它并自由地重新发布:

1.决不能虚报软件的来源;

你决不能声称是你是软件的第一作者。

如果你在某个产品中使用了这个软件,那么在产品文档中加入一个致谢辞我们会很感激,但这并非必要。

2.修改了源版本就应该清楚地标记出来,决不能虚报说这是原始软件。

3.本通告不能从源发布版本中移除或做修改。

参考书目

万维网联盟是定制XML的权威标准机构,它的网页上有大量的信息。

权威指南:

http:

//www.w3.org/TR/2004/REC-xml-20040204/

我还要推荐由OReilly出版由RobertEckstein撰写的"

XMLPocketReference"

……这本书囊括了入门所需要的一切。

捐助者,联系人,还有简史

非常感谢给我们建议,漏洞报告,意见和鼓励的所有人。

它们很有用,并且使得这个项目变得有趣。

特别感谢那些捐助者,是他们让这个网站页面生机勃勃。

有很多人发来漏洞报告和意见,与其在这里一一列出来不如我们试着把它们写到“changes.txt”文件中加以赞扬。

TinyXML的原作者是LeeThomason(文档中还经常出现“我”这个词)。

在YvesBerquin,AndrewEllerton,和tinyXml社区的帮助下,Lee查阅修改和发布新版本。

我们会很感激你的建议,还有我们想知道你是否在使用TinyXML。

希望你喜欢它并觉得它很有用。

请邮寄问题,评论,漏洞报告给我们,或者你也可登录网站与我们取得联系:

LeeThomason,YvesBerquin,AndrewEllerton

关于TinyXML文档的翻译

翻译这份文档是因为前段时间做项目时需要用到XML解析,在网上找了不少这方面的东西,XercesC++无疑是最强大的,但对我来说Xerces实在太庞大了,我只需要最基本的XML解析就够了。

最后发现了TinyXML,这家伙正是我需要的,够简单够小巧,而且跨平台,要知道跨平台对于C/C++简直是一场恶梦,别说Unix与Windows之间的跨平台,就连Linux,HP,AIX和Solaris之间的跨平台就足够让我头大了,这也是为什么我程序写到90%时换用JAVA写的原因之一。

但TinyXML这个小巧的C++XML解析器还是给我留下了深刻的印象,学习曲线相当平缓,我记得当时花了一个下午就看完它的Documentation和Tutorial并完成了那个XML应用模块的开发。

所以如果你在C++中要用到不需太复杂的XML解析,那TinyXML非常值得考虑。

就由于其Documentation和Tutorial的短小,所以我才产生了翻译它们并放到blo

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 其它课程

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1