IE浏览器打开xml文件中文出现乱码问题

遇到一个问题,用python和yattay创建写入一个xml文件,第一次用IE浏览器打开这个xml文件时,IE浏览器一片空白。查了一下,有的同学说要将xml文件保存为UTF-8的编码格式。用记事本打开重新保存之后发现xml文件里的中文乱码了,其他的都没问题,后来在win10系统上保存为带有BOM的UTF-8编码格式,再用IE打开就没问题了。在这里插入图片描述

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
如果你喜欢这个免费软件,请MAIL一封信以对我的支持。 Collector资料收集管理器 V4.1 Collector资料收集管理器能够把您收集的文本、网页、图片等资料都存放在一起,统一管理的绿色免费软件。 使用系统图标,支持大容量数据库,支持拖拉操作,采用视窗风格,目录树结构管理,所见即所得的设计理念,操作方便。 上网浏览网页时允许通过定制IE的右键菜单来方便收集网页、图片和文字。 本软件特色是可以直接把整个网页保存成MHT或JPG格式的文件,独特的收集网页图片模式。 本地导入速度一流,比其它同类的软件都快很多(可以在网上找一个同类软件导入过万条记录比较)。 是一个非常实用的电子书制作工具;可以把数据库文件转换成可执行文件(*.exe),也可以制作成CHM文件。 您可以给书籍文件或者节点设置密码。 可以实时备份数据库,可查看修改记录,保证你的数据安全。 免费分享数据库。 附带一个例子数据库,里面有使用方法。 讨论Collector 资料收集管理器的QQ群号码 27585577 论坛 http://14500001.blog.163.com/ http://user.qzone.qq.com/14500001 V4.1版本 更新日期 2010-03-20 更新内容 1、调整菜单; 2、修正批量改节点功能; 3、添加另存数据库功能; 4、修正对实时备份数据库的判断。 更新日期 2010-01-04 更新内容 1、升级数据库版本,支持更多功能; 2、使用SQLite数据库(RTB)进行实时备份数据库,数据库(HDF)打开始加载。 2、全新界面,可改变布局和改变皮肤; 3、查询状态下可修改数据; 4、EXE电子书文件可自定义图标。 更新日期 2009-03-24 21:00:00 更新内容 1、修正新建数据库的一个问题; 2、改写保存数据库方式; 更新日期 2009-02-21 23:45:00 更新内容 1、修正不允许运行多个Collector时,程序最小化无法密码保护问题; 2、修正制作EXE电子书的一个问题; 3、添加收集网页时先对数据进行校验再导入,防止导入空数据破坏节点; 4、修正判断OFFICE是否安装的问题。 2008-10-15 16:35:00 更新内容 1、一些微小的改动 2、修正软件在数据库只读环境下导出的问题 2008-08-25 更新内容 1、添加翻页阅读; 2、添加批量改名; 3、添加闹钟提醒; 4、添加最小化到任务栏; 5、添加保存时检查索引。 2008-08-01 16:10:00 更新内容 1、修正由于空文件夹无法生成CHM电子书的问题; 2008-07-17 更新内容 1、修正导出CHM文件每个目录的连接。 2008-07-10 更新内容 1、修正判断是否安装OFFICE的问题; 2、优化收集网页(htm格式)代码。 2008-06-26 14:30:00 更新内容 1、修正收集某些网页时无法浏览的问题; 2008-06-19 14:15:00 更新内容 1、修正收集网页时某些图片无法显示问题; 2、修正收集图片排序问题; 更新日期 2008-05-09 14:00:00 更新内容 1、修正新建数据库新建文件提示密码问题; 更新日期 2008-04-24 15:30:00 更新内容 1、修正新建数据库导入本地文件提示密码问题; 2、修正无法打开只读属性文件的问题; 3、修正回收站无法导出CHM问题; 4、...... 更新日期 2008-04-16 15:00:00 更新内容 1、更换文本文件编辑,支持语法高亮显示; 2、添加网页编辑功能; 3、使用软件自身做电子书执行文件,大大减少软件大小。 4、..... 更新日期 2008-03-14 16:00:00 更新内容 1、支持OFFICE2007最新的XLSX、DOCX、PPTX格式文件。 2、添加回收站功能。 3、添加节点排序功能。 4、修正一个加密问题。 5、修正按内容搜索后,切换到编辑窗口后不能编辑。 更新日期 2008-03-04 10:30:00 更新内容 1、添加读书模式(文本类型文件); 2、添加自定义调用外部编辑器编辑功能(文本类型文件); 3、修正修改节点(文件夹)备注会损坏节点图标问题; 4、添加记忆悬浮窗位置功能; 5、修正收集图片时收集窗体无法最前端功能(IE7); 6、加快调用QQ抓图速度; 7、修改导入本地文件不是在选中节点下的问题 更新日期 2008-02-23 14:00:00 更新内容 1、修改截图,使用最新的QQ截图功能; 2、修正加载数据库时的一个问题; 3、判断是否使用OFICE2007,对OFFICE2007,不再使用IE打开方式。 更新日期 2008-02-01 15:50:00 更新内容 1、修正打开数据库CPU占用率很高的问题 2008-01-25 11:00:00 更新内容 1、添加...... 2、添加抓图到文本文件功能,保存时需要转为RTF格式。 3、修正只读打开还能添加数据的问题。 2007-12-29 1、添加书签保存、管理功能 2、修正一个损坏节点问题 3、添加编辑文本的一些功能 4、添加数据库列表功能 5、修正一些小问题 更新日期 2007-12-21 1、修正网页滚动抓图问题 更新日期 2007-12-15 1、添加最小化到托盘选项 2、添加启动显示悬浮窗选项 3、添加更改软件所在文件夹图标选项 4、添加判断导入网页路径是否重复功能 5、添加支持从网页(暂时只文本)或图片拖拉到悬浮窗保存 6、修改软件内部拖拉功能(按Ctrl或Alt和不按功能不同) 7、修改软件启动的语言为上次选择的语言 8、添加关闭程序不提示备份选项 9、添加导入TXT文件取第一行内容为标题功能 更新内容(重要提示:请及时备份数据) 2007-11-18 11:25:00 修正一个导入文件会损坏节点问题; 修正修改节点密码; 修正....... 2007-10-16 1、减少IE右键菜单(需重新创建到IE浏览器右键菜单才能生效) 2、添加收集时可编辑节点信息。 2007-10-10 15:55:00 1、添加word文件显示常用、格式工具栏及不显示审阅工具栏 2、添加Excel、PowerPoint文件显示常用、格式工具栏 2007-09-16 16:00:00 美化界面 自动提示版本更新 修正编辑文本保存的问题(之前是OK的) 2007-09-11 13:50:00 修正节点标题的复制粘贴问题 修正密码框焦点问题 修正菜单导入文件时只有exe文件的错误(之前是OK的) 2007-09-09 修正显示目录栏宽度问题; 修正自身复制监视剪贴板的问题; 修正收集网页图片的一个小问题。 V2.9 2007-09-06 17:00:00 添加调用OFFICE打开EXCEL、WORD、PowerPoint文件功能,而且修改后能自动回存到数据库。 修正浏览文本时TAB键不可用的问题。 添加最前端按钮。 添加直接调用QQ和作者交流; 2007-08-24 13:25:00 添加节点有附件时图标异样显示 2007-08-15 10:50:00 修正新建一个数据库时不能新建一个目录或文件 2007-08-10 15:45:00 1、添加修改文本的一些功能。 2、修正文本状态下设标题错误问题; 2.85 1、修正在VISTA下MHT格式收集网页无内容显示问题。 2.84 1、修正在VISTA下无法使用问题。 2.83版本 1、修正一些搜索问题; 2、添加新建根目录文件菜单。 2.82版本 1、修正在搜索数据库时导入本地文件会导致节点损坏的问题; 2、加快加载数据库。 3、改删除节点快捷方式为DEL键。 2.81版本 1、修正合并数据库会导致数据库损坏的问题; 2.8版本 1、添加内嵌打开、修改、保存EXCEL、WORD、PowerPoint文件功能(需要安装OFFICE); 2、添加内嵌打开PDF文件功能(需要安装PDF软件); 3、修正繁体下的一些问题。 4、添加图片预览功能; 5、修正一个会导致数据库损坏的问题; 6、修正几个小问题。 2.7版本 1、修改下载功能,添加HTTP代理模式; 2、添加标题着色功能; 3、修改收集网页(Htm)格式方法; 4、右键收集可以选择导入当前目录; 2.6版本 1、添加下载数据库功能。 2、创建或清除快捷方式无须重新打开ie。 3、修改加载图标算法,超速打开数据库。 打开数据库后请使用修复图标功能,再次打开才能体现。 2.5版本 1、添加附件功能; 2、自定义抓图压缩率。 3、添加下载数据库功能。 4、创建或清除快捷方式无须重新打开ie。 2.4版本 1、添加最小化密码保护; 2、自定义滚动抓图刷新时间。 3、修正导出有重名的文件的问题。 4、修正查询HTM格式文件问题。 5、修正下载问题。 2.3版本 1、添加制作EXE格式电子书功能; 2、修正节点标题粘贴问题。 3、修正合并2.2版本数据库HTM格式的文件无法浏览的情况。 4、修改TXT文件被修改转为RTF的提示。 .... 2.2版本 1、修改保存网页HTM方式; 2、添加选择多张图片保存成HTM方式; 3、添加简单的图像编辑功能; 4、修改数据库结构(打开旧版本数据库会自动转换),添加文件备注; 注意:新版本数据库不能使用旧版本软件打开。 5、添加收集网页时自动保存功能; 6、...... 2.1版本 1、修改抓图方式,改为调用QQ链接库抓图(无需安装QQ); 2、修正在2003下抓网页为JPG图片不全问题; 3、修正在XP下导入网页图片节点添加问题; 4、搜索状态下添加导出功能; 5、添加数据库所在磁盘空间不足时导入过多数据提示; 6、修改在线升级; 7、添加节点手动排序; 8、加大悬浮窗口; 9、标题栏可以使用系统右键菜单(剪切粘贴复制); 10、在菜单中添加书签功能; 11、在菜单中添加导入功能; 12、添加清除软件在系统中的所有痕迹功能; 2.0版本 1、修正在WIN98下程序在根目录运行出错的问题; 2、修正在繁体系统下语言版本的问题; 3、添加在文档中插入图片和插入附件功能; 4、添加在线升级功能; 5、添加重要更能:支持所有文件类型; 6、添加自定义热键功能; 7、添加多种选项把保存网页成图片。 8、修改抓图模式。 9、修正一些错误。 1.9版本 1、添加导出数据生成程序数据库HDF格式功能。 2、修正合并数据库没有考虑到合并的数据库密码问题; 3、修正旧版本选择不压缩的数据库转为新版本的数据库浏览时数据出错的问题。 4、把hha.dll和hhc.exe这两个文件打包进执行文件。 5、添加制作CHM文件选项。 6、美化菜单; 使用技巧 1、务必要看例子数据库的使用方法。 2、浏览网页如果乱码,请取消使用流浏览,IE5.0版本不支持MHT文件格式请使用IE5.5或以上版本。 3、最小化可以双击右下角的图标来显示主窗体。 4、收集网页数据时最好先把一个数据库关联到我的最爱,这样就可以在软件没有运行的状态下点击IE右键菜单直接启动软件导进设好的数据库里面,无须先启动软件。注意:软件可以同时运行多个,收集网页时请只运行一个。 5、如果你想修改左边目录文件的标题,可以把在右边选中的文字拖拉过去就行了,文本网页都可以。 6、请经常备份数据库。 7、如果没有图片的网页不推荐保存成MHT格式,因为MHT格式文件大,而且打开耗内存(这是IE的问题)。 8、如果你删除了脚本文件,请重新创建IE快捷方式。 1.8版本 1、添加合并数据库功能; 2、添加是否允许运行多个程序功能; 3、添加选择压缩方式功能; 4、优化内存使用; 5、修正从菜单功能中导进文件数据对不上的问题; 6、修正添加无内容文件时的BUG; 7、添加只读打开功能(要设置密码); 1.7版本 1、修改数据库格式,添加一些数据库信息,程序会把旧数据库自动转换到新版本的数据库格式,在同目录下面有后缀名为OLD的原数据库的备份文件,以防万一出错。 2、新版本已经把Collector.ini放到可执行文件的当前目录,而且新版本还有一个language文件夹和desktop.ini、Collector.ico两个文件。 3、添加清除本软件在注册表的信息,如果你不想用本软件可以选中清除软件痕迹菜单。 4、添加生成CHM格式功能(需要把hha.dll和hhc.exe这两个文件放在和Cellector.exe同一目录) 5、添加记录导进文件的路径功能。 6、添加书签功能,没有限制书签数目,搜索时也可以使用。 7、添加导入和其它一些菜单。 8、添加一些小功能和修正一些错误。 在例子数据库里添加了生成CHM文件和把网页抓图保存成JPG文件的源代码,希望各位指点。 1.6版本 1、添加浏览网页时把网页抓图保存成JPG文件功能(针对单框架网页); 2、添加设定数据库密码功能; 3、添加热键抓图功能(ALT+A); 4、添加最小化窗体或显示功能(ALT+Z); 5、修正把大网页保存成MHT文件出错的问题; 1.5版本 1、添加浏览网页时放大网页功能; 2、修正由于输入法引起的一个错误; 3、优化收集网页代码,改为直接使用内存流,加快导入速度。 1.4版本 1、重写使用IE右键收集网页的代码,能很好的收集网页(可以和其它软件对比看看结果),大大加强了IE收集功能, 2、添加把网页保存成文本功能, 3、添加支持RTF文件, 4、添加备份数据功能, 5、大幅度提高了打开数据库的速度, 6、修正了一次性导进超过5万条记录出错的BUG, 注意:1.4版本IE收集功能改变太大,如果使用了之前的版本 第一,删除Collector.exe根目录下面的*.htm文件,替换使用新版本的Collector.exe文件。 第二,手工删除IE右键带☆号的菜单(使用其它软件),运行本程序再重新创建IE右键菜单。  默认支持以下类型 .HTM;.HTML;.HTX;.HTW;.MHT;.MHTML;.SHTML;.XML;.EML;.SWF;.PHP;.TXT;.RTF;.JPEG;.JPG;.GIF;.BMP;.TIFF;.PCX;.ICO;.CUR;.PNG;.WMF;.EMF;.TGA;.PXM;.TIF;.XIF;.JPE;.JIF;.JFIF;.DCX;.ANI;
TinyXML是一个简单小巧,可以很容易集成到其它程序中的C++ XML解析器。 它能做些什么 简单地说,TinyXML解析一个XML文档并由此生成一个可读可修改可保存的文档对象模型(DOM)。 XML的意思是“可扩展标记语言“(eXtensible Markup Language)。它允许你创建你自己的文档标记。在为浏览器标记文档方面HTML做得很好,然而XML允许你定义任何文档标记,比如可以为一个组织者应用程序定义一个描述“to do”列表的文档。 XML拥有一个结构化并且方便的格式,所有为存储应用程序数据而创建的随机文件格式都可以用XML代替,而这一切只需要一个解析器。 最全面正确的说明可以在http://www.w3.org/TR/2004/REC-xml-20040204/找到,但坦白地说,它很晦涩难懂。事实上我喜欢http://skew.org/xml/tutorial上关于XML的介绍。 有不同的方法可以访问和与XML数据进行交互。TinyXML使用文档对象模型(DOM),这意味着XML数据被解析成一个可被浏览和操作的C++对象,然后它可以被写到磁盘或者另一个输出流中。你也可以把C++对象构造成一个XML文档然后把它写到磁盘或者另一个输出流中。 TinyXML被设计得容易快速上手。它只有两个头文件和四个cpp文件。只需要把它们简单地加到你的项目中就行了。有一个例子文件——xmltest.cpp来引导你该怎么做。 TinyXML以Zlib许可来发布,所以你可以在开源或者商业软件中使用它。许可证更具体的描述在每个源代码文件的顶部可以找到。 TinyXML在保证正确和恰当的XML输出的基础上尝试成为一个灵活的解析器。TinyXML可以在任何合理的C++适用系统上编译。它不依赖于异常或者运行时类型信息,有没有STL支持都可以编译。TinyXML完全支持UTF-8编码和前64k个字符实体(译注:如果你不明白这句译文,可能你需要了解一下Unicode编码)。 它无法做些什么 TinyXML不解析不使用DTDs(文档类型定义)或者XSLs(可扩展样式表语言)。有其它解析器(到www.sourceforge.org搜索一下XML)具有更加全面的特性,但它们也就更大,需要花更长的时间来建立你的项目,有更陡的学习曲线,而且经常有一个更严格的许可协议。如果你是用于浏览器或者有更复杂的XML需要,那么TinyXML不适合你。 下面的DTD语法在TinyXML里是不做解析的: <!DOCTYPE Archiv [ ]> 因为TinyXML把它看成是一个带着非法嵌入!ELEMENT结点的!DOCTYPE结点。或许这在将来会得到支持。 指南 有耐性些,这是一份能很好地指导你怎么开始的指南,它(非常短小精悍)值得你花时间完整地读上一遍。 TinyXML指南 代码状况 TinyXML是成熟且经过测试的代码,非常健壮。如果你发现了漏洞,请提交漏洞报告到sourcefore网站上 (www.sourceforge.net/projects/tinyxml)。 我们会尽快修正。 有些地方可以让你得到提高,如果你对TinyXML的工作感兴趣的话可以上sourceforge查找一下。 相关项目 你也许会觉得TinyXML很有用!(简介由项目提供) TinyXPath (http://tinyxpath.sourceforge.net). TinyXPath是一个小巧的XPath语法译码器脚本,用C++写成。 TinyXML++ (http://code.google.com/p/ticpp/). TinyXML++是一个全新的TinyXML接口,使用了许多诸如模板,异常处理和更好的错误处理这些C++强项技术。 特性 使用STL TinyXML可以被编译成使用或不使用STL。如果使用STL,TinyXML会使用std::string类,而且完全支持std::istream,std::ostream,operator<>。许多API方法都有 ‘const char*’和’const std::string&’两个版本。 如果被编译成不使用STL,则任何STL都不会被包含。所有string类都由TinyXML它自己实现。所有API方法都只提供’const char*’传入参数。 使用运行时定义: TIXML_USE_STL 来编译成不同的版本。这可以作为参数传给编译器或者在“tinyxml.h”文件的第一行进行设置。 注意:如果在Linux上编译测试代码,设置环境变量TINYXML_USE_STL=YES/NO可以控制STL的编译。而在Windows上,项目文件提供了STL和非STL两种目标文件。在你的项目中,在tinyxml.h的第一行添加"#define TIXML_USE_STL"应该是最简单的。 UTF-8 TinyXML支持UTF-8,所以可以处理任何语言的XML文件,而且TinyXML也支持“legacy模式”——一种在支持UTF-8之前使用的编码方式,可能最好的解释是“扩展的ascii”。 正常情况下,TinyXML会检测出正确的编码并使用它,然而,通过设置头文件中的TIXML_DEFAULT_ENCODING值,TinyXML可以被强制成总是使用某一种编码。 除非以下情况发生,否则TinyXML会默认使用Legacy模式: 如果文件或者数据流以非标准但普遍的"UTF-8引导字节" (0xef 0xbb 0xbf)开始,TinyXML会以UTF-8的方式来读取它。 如果包含有encoding="UTF-8"的声明被读取,那么TinyXML会以UTF-8的方式来读取它。 如果读取到没有指定编码方式的声明,那么TinyXML会以UTF-8的方式来读取它。 如果包含有encoding=“其它编码”的声明被读取,那么TinyXML会以Legacy模式来读取它。在Legacy模式下,TinyXML会像以前那样工作,虽然已经不是很清楚这种模式是如何工作的了,但旧的内容还得保持能够运行。 除了上面提到的情况,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.org link上关于转换编码的话题做得很好。 测试文件“utf8test.xml”包含了英文、西班牙文、俄文和简体中文(希望它们都能够被正确地转化)。“utf8test.gif”文件是从IE上截取的XML文件快照。请注意如果你的系统上没有正确的字体(简体中文或者俄文),那么即使你正确地解析了也看不到与GIF文件上一样的输出。同时要注意在一个西方编码的控制台上(至少我的Windows机器是这样),Print()或者printf()也无法正确地显示这个文件,这不关TinyXML的事——这只是操作系统的问题。TinyXML没有丢掉或者损坏数据,只是控制台无法显示UTF-8而已。 实体 TinyXML认得预定义的特殊“字符实体”,即: & & < > " " &apos; ‘ 这些在XML文档读取时都会被辨认出来,并会被转化成等价的UTF-8字符。比如下面的XML文本: Far & Away 从TiXmlText 对象查询出来时会变成"Far & Away"这样的值,而写回XML流/文件时会以“&”的方式写回。老版本的TinyXML“保留”了字符实体,而在新版本中它们会被转化成字符串。 另外,所有字符都可以用它的Unicode编码数字来指定, " "和" "都表示不可分的空格字符。 打印 TinyXML有几种不同的方式来打印输出,当然它们各有各的优缺点。 Print( FILE* ):输出到一个标准C流中,包括所有的C文件和标准输出。 "相当漂亮的打印", 但你没法控制打印选项。 输出数据直接写到FILE对象中,所以TinyXML代码没有内存负担。 被Print()和SaveFile()调用。 operator<<:输出到一个c++流中。 与C++ iostreams集成在一起。 在"network printing"模式下输出没有换行符,这对于网络传输和C++对象之间的XML交换有好处,但人很难阅读。 TiXmlPrinter:输出到一个std::string或者内存缓冲区中。 API还不是很简练。 将来会增加打印选项。 在将来的版本中可能有些细微的变化,因为它会被改进和扩展。 流 设置了TIXML_USE_STL,TinyXML就能支持C++流(operator <>)和C(FILE*)流。但它们之间有些差异你需要知道: C风格输出: 基于FILE* 用Print()和SaveFile()方法 生成具有很多空格的格式化过的输出,这是为了尽可能让人看得明白。它们非常快,而且能够容忍XML文档中的格式错误。例如一个XML文档包含两个根元素和两个声明仍然能被打印出来。 C风格输入: 基于FILE* 用Parse()和LoadFile()方法 速度快,容错性好。当你不需要C++流时就可以使用它。 C++风格输出: 基于std::ostream 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 ( root ) { TiXmlElement* element = root->FirstChildElement( "Element" ); if ( element ) { TiXmlElement* child = element->FirstChildElement( "Child" ); if ( child ) { TiXmlElement* child2 = child->NextSiblingElement( "Child" ); if ( child2 ) { // Finally do something useful. 用句柄的话就不会这么冗长了,使用TiXmlHandle类,前面的代码就会变成这样: TiXmlHandle docHandle( &document ); TiXmlElement* child2 = docHandle.FirstChild( "Document" ).FirstChild( "Element" ).Child( "Child", 1 ).ToElement(); if ( child2 ) { // do something useful 这处理起来容易多了。 查阅TiXmlHandle可以得到更多的信息。 行列追踪 对于某些应用程序来说,能够追踪节点和属性在它们源文件中的原始位置是很重要的。另外,知道解析错误在源文件中的发生位置可以节省大量时间。 TinyXML能够追踪所有结点和属性在文本文件中的行列原始位置。TiXmlBase::Row() 和 TiXmlBase::Column() 方法返回结点在源文件中的原始位置。正确的制表符号可以经由TiXmlDocument::SetTabSize() 来配置。 使用与安装 编译与运行xmltest: 提供了一个Linux Makefile和一个Windows Visual C++ .dsw 文件。只需要简单地编译和运行,它就会在你的磁盘上生成demotest.xml文件并在屏幕上输出。它还尝试用不同的方法遍历DOM并打印出结点数。 那个Linux makefile很通用,可以运行在很多系统上——它目前已经在mingw和MacOSX上测试过。你不需要运行 ‘make depend’,因为那些依赖关系已经硬编码在文件里了。 用于VC6的Windows项目文件 tinyxml: tinyxml 库,非STL tinyxmlSTL: tinyxml 库,STL tinyXmlTest: 用于测试的应用程序,非STL tinyXmlTestSTL: 用于测试的应用程序,STL Makefile 在makefile的顶部你可以设置: PROFILE,DEBUG,和TINYXML_USE_STL。makefile里有具体描述。 在tinyxml目录输入“make clean”然后“make”,就可以生成可执行的“xmltest”文件。 在某一应用程序中使用: 把tinyxml.cpp,tinyxml.h, tinyxmlerror.cpp, tinyxmlparser.cpp, tinystr.cpp, 和 tinystr.h 添加到你的项目和makefile中。就这么简单,它可以在任何合理的C++适用系统上编译。不需要为TinyXML打开异常或者运行时类型信息支持。 TinyXML怎么工作 举个例子可能是最好的办法,理解一下: Go to the Toy store! Do bills 它称不上是一个To Do列表,但它已经足够了。像下面这样读取并解析这个文件(叫“demo.xml”)你就能创建一个文档: TiXmlDocument doc( "demo.xml" ); doc.LoadFile(); 现在它准备好了,让我们看看其中的某些行和它们怎么与DOM联系起来。 第一行是一个声明,它会转化成TiXmlDeclaration 类,同时也是文档结点的第一个子结点。 这是TinyXML唯一能够解析的指令/特殊标签。一般来说指令标签会保存在TiXmlUnknown 以保证在它保存回磁盘时不会丢失这些命令。 这是一个注释,会成为一个TiXmlComment对象。 "ToDo"标签定义了一个TiXmlElement 对象。它没有任何属性,但包含另外的两个元素。 生成另一个TiXmlElement对象,它是“ToDo”元素的子结点。此元素有一个名为“priority”和值为“1”的属性。 Go to the TiXmlText ,这是一个叶子结点,它不能再包含其它结点,是"Item" TiXmlElement的子结点。 另一个TiXmlElement, 这也是“Item”元素的子结点。 等等 最后,看看整个对象树: TiXmlDocument "demo.xml" TiXmlDeclaration "version=’1.0′" "standalone=no" TiXmlComment " Our to do list data" TiXmlElement "ToDo" TiXmlElement "Item" Attribtutes: priority = 1 TiXmlText "Go to the " TiXmlElement "bold" TiXmlText "Toy store!" TiXmlElement "Item" Attributes: priority=2 TiXmlText "Do bills" 文档 本文档由Doxygen使用‘dox’配置文件生成。 许可证 TinyXML基于zlib许可证来发布: 本软件按“现状”提供(即现在你看到的样子),不做任何明确或隐晦的保证。由使用此软件所引起的任何损失都决不可能由作者承担。 只要遵循下面的限制,就允许任何人把这软件用于任何目的,包括商业软件,也允许修改它并自由地重新发布: 1. 决不能虚报软件的来源;你决不能声称是你是软件的第一作者。如果你在某个产品中使用了这个软件,那么在产品文档中加入一个致谢辞我们会很感激,但这并非必要。 2. 修改了源版本就应该清楚地标记出来,决不能虚报说这是原始软件。 3. 本通告不能从源发布版本中移除或做修改。 参考书目 万维网联盟是定制XML的权威标准机构,它的网页上有大量的信息。 权威指南:http://www.w3.org/TR/2004/REC-xml-20040204/ 我还要推荐由OReilly出版由Robert Eckstein撰写的"XML Pocket Reference"……这本书囊括了入门所需要的一切。 捐助者,联系人,还有简史 非常感谢给我们建议,漏洞报告,意见和鼓励的所有人。它们很有用,并且使得这个项目变得有趣。特别感谢那些捐助者,是他们让这个网站页面生机勃勃。 有很多人发来漏洞报告和意见,与其在这里一一列出来不如我们试着把它们写到“changes.txt”文件中加以赞扬。 TinyXML的原作者是Lee Thomason(文档中还经常出现“我”这个词) 。在Yves Berquin,Andrew Ellerton,和tinyXml社区的帮助下,Lee查阅修改和发布新版本。
XML越来越热,关于XML的基础教程网络上也随处可见。可是一大堆的概念和术语往往让人望而生畏,很多朋友问我:XML到底有什么用,我们是否需要学习它?我想就我个人学习过程的心得和经验,写一篇比较全面的介绍文章。首先有两点是需要肯定的:   第一:XML肯定是未来的发展趋势,不论是网页设计师还是网络程序员,都应该及时学习和了解,等待只会让你失去机会;   第二:新知识肯定会有很多新概念,尝试理解和接受,您才可能提高。不要害怕和逃避,毕竟我们还年轻。   本文共分五大部分。分别是XML快速入门,XML的概念,XML的术语,XML的实现,XML的实例分析。最后附录介绍了XML的相关资源。作者站在普通网页设计人员的角度,用平实生动的语言,向您讲述XML的方方面面,帮助你拨开XML的神秘面纱,快速步入XML的新领域。 • 第一章:XML快速入门 • 一. 什么是XML? • 二. XML是新概念吗? • 三. 使用XML有什么好处? • 四. XML很难学吗? • 五. XML和HTML的区别 • 六. XML的严格格式 • 七. 关于XML的更多 • 第二章:XML概念 • 一. 扩展性 • 二. 标识 • 三. 语言 • 四. 结构化 • 五. Meta数据 • 六. 显示 • 七. DOM • 第三章:XML的术语 • 导言 • 一.XML文档的有关术语 • 二.DTD的有关术语 • 第四章:XML的语法 • 一.XML语法规则 • 二.元素的语法 • 三.注释的语法 • 四.CDATA的语法 • 五.Namespaces的语法 • 六.entity的语法 • 七.DTD的语法 • 第五章:XML实例解释 • 一.定义新标识 • 二.建立XML文档 • 三.建立相应的HTML文件 • 第六章:XML相关资源 五. XML和HTML的区别 XML和HTML都来自于SGML,它们都含有标记,有着相似的语法,HTML和XML的最大区别在于:HTML是一个定型的标记语言,它用固有的标记来描述,显示网页内容。比如表示首行标题,有固定的尺寸。相对的,XML则没有固定的标记,XML不能描述网页具体的外观,内容,它只是描述内容的数据形式和结构。 这是一个质的区别:网页将数据和显示混在一起,而XML则将数据和显示分开来。 我们看上面的例子,在myfile.htm中,我们只关心页面的显示方式,我们可以设计不同的界面,用不同的方式来排版页面,但数据是储存在myfile.xml中,不需要任何改变。 (如果你是程序员,你会惊讶的发现,这与模块化面向对象编程的思想极其相似!其实网页何尝不是一种程序呢?) 正是这种区别使得XML在网络应用和信息共享上方便,高效,可扩展。所以我们相信,XML做为一种先进的数据处理方法,将使网络跨越到一个新的境界。 六. XML的严格格式 吸取HTML松散格式带来的经验教训,XML一开始就坚持实行"良好的格式"。 我们先看HTML的一些语句,这些语句在HTML中随处可见: 1. sample 2.sample 3.sample 4.samplar 在XML文档中,上述几种语句的语法都是错误的。因为: 1.所有的标记都必须要有一个相应的结束标记; 2.所有的XML标记都必须合理嵌套; 3.所有XML标记都区分大小写; 4.所有标记的属性必须用""括起来; 所以上列语句在XML中正确的写法是 1. sample 2.sample 3.sample 4.samplar   另外,XML标记必须遵循下面的命名规则: 1.名字中可以包含字母、数字以及其它字母; 2.名字不能以数字或"_" (下划线) 开头; 3.名字不能以字母 xml (或 XMLXml ..) 开头; 4.名字中不能包含空格。 在XML文档中任何的差错,都会得到同一个结果:网页不能被显示。各浏览器开发商已经达成协议,对XML实行严格而挑剔的解析,任何细小的错误都会被报告。你可以将上面的myfile.xml修改一下,比如将改为,然后用IE5直接打开myfile.xml,会得到一个出错信息页面: XML轻松学习手册 ajie <E

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值