CN101446968B - 解析可扩展标记语言的方法 - Google Patents
解析可扩展标记语言的方法 Download PDFInfo
- Publication number
- CN101446968B CN101446968B CN 200810204371 CN200810204371A CN101446968B CN 101446968 B CN101446968 B CN 101446968B CN 200810204371 CN200810204371 CN 200810204371 CN 200810204371 A CN200810204371 A CN 200810204371A CN 101446968 B CN101446968 B CN 101446968B
- Authority
- CN
- China
- Prior art keywords
- node
- parsing
- extend markup
- document
- markup language
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Images
Landscapes
- Document Processing Apparatus (AREA)
Abstract
本发明关于一种解析可扩展标记语言的方法,该方法包括如下步骤:提供一解析器,该解析器可从一存储器中读取可扩展标记语言文档;选取文档中重复出现的元素节点作为标志节点,并且确定一次解析标志节点的预设个数;向解析器中传输已解析文档的字符流的长度;解析器解析文档;将已解析的文档数据传递给应用程序处理;释放解析过程中标志节点所占用的系统资源。
Description
技术领域
本发明涉及一种计算机语言解析方法,尤其涉及可扩展标记语言(XML)的解析方法。
背景技术
可扩展标记语言,即eXtensible Markup Language(XML),是一种标准通用标记语言。XML是网络环境中跨平台的、依赖于内容的技术,是当前处理结构化文档信息的强有力工具。同时,XML也是一种简单的数据存储语言,使用一系列简单的标记描述数据,而这些标记可以用方便的方式建立,虽然XML比二进制数据占用更多的空间,但XML极其简单易于掌握和使用。
XML的简单使其易于在任何应用程序中读写数据,这使XML成为数据交换的唯一公共语言,虽然不同的应用软件也支持其它的数据交换格式,但不久之后都将支持XML,那就意味着程序可以更容易地与Windows、Mac OS,Linux以及其他平台下产生的信息结合,然后可以很容易加载XML数据到程序中并加以分析,并以XML格式输出结果。
因此,XML在数据导出、导入、列表查看方面极具应用。
XML终归是一种以计算机语言的语法表达的结构,在数据导出、导入或查看时,需要利用XML语法解析器进行解析。
目前XML文档的解析包括两种技术:文档对象模型(DOM,Document ObjectModel)和XML简单应用程序接口(SAX,Simple API for XML)。
DOM是用与平台和语言无关的方式表示XML文档的万维网(W3C,WorldWide Web Consortium)官方标准。DOM是以层次结构组织的节点或信息片断的集合。这个层次结构允许开发人员在树中寻找特定信息。分析该结构通常需要加载整个文档和构造层次结构,然后才能处理XML文档中的数据。由于它是基于信息层次的,因而DOM被认为是基于树或基于对象的。
SAX是一个用于处理XML事件驱动的“推”模型,虽然它不是W3C标准,但它也是一个得到了广泛认可的API。SAX解析器不像DOM那样建立一个完整的文档树,而是在读取文档时激活一系列事件,这些事件被推给事件处理器,然后由事件处理器提供对文档内容的访问。
DOM解析器把XML文档转化为一个包含其内容的树,并可以对树进行遍历。用DOM解析模型的优点是编程容易,开发人员只需要调用建树的指令,然后访问所需的树节点来完成任务。可以很容易地添加和修改树中的元素。然而由于使用DOM解析器的时候需要处理整个XML文档,所以对性能和内存的要求比较高,尤其在手机等嵌入式系统中很难满足其要求。
SAX对内存的要求通常会比较低,因为它让开发人员自己来决定所要处理的关键字标记(TAG)。但用SAX解析器的时候编码工作会比较困难,而且很难同时访问同一个文档中的多处不同数据。
在手机等嵌入式系统中,已经非常广地使用XML文档备份数据。这些备份数据通常都需要整个文档解析,而手机等嵌入式系统的内存资源又十分紧张,因此以上两种解析方式都不能很好的满足需求。
发明内容
本发明要解决的技术问题在于提供一种在占用系统资源较少的情况下快速解析XML文档的方法。
本发明通过这样的技术方案解决上述的技术问题:
一种解析可扩展标记语言的方法,该方法包括如下步骤:
提供一解析器,该解析器可从一存储器中读取可扩展标记语言文档;
选取文档中重复出现的元素节点作为标志节点,并且确定一次解析标志节点的预设个数;
向解析器中传输已解析文档的字符流的长度;
解析器解析文档;
将已解析的文档数据传递给应用程序处理;
释放解析过程中节点所占用的系统资源。
作为本发明的一种改进,该方法还提供一个计数器,用以计算已解析的节点个数。
作为本发明的一种改进,于解析文档过程中,空的元素节点不链接到节点树。
作为本发明的一种改进,于解析文档过程中,声明节点与元素节点之外的其他节点直接被忽略。
作为本发明的一种改进,解析可扩展标记语言文档的关键字包括:“<?xml”、“?>”、“<tag>”和“</tag>”、<![CDATA[string]]>,其中tag为任意符合可扩展标记语言标签规范的字符串,string为任意字符串。
作为本发明的一种改进,释放解析过程中标志节点所占用的系统资源包括释放解析过程中空的元素节点占用的系统资源、单次解析后释放标志节点占用的系统资源、解析全部完成后所有节点占用的系统资源。
与现有技术相比较,本发明具有以下优点:
每轮解析过程中的每次解析完成后,都会释放节点所占用的内存资源,并且不将空的元素节点链接到节点树,另外直接忽略注释节点等不影响文档内容的节点,因此,所占用系统内存资源较少,另外,将一个XML文档进行拆解,进行多次解析,提升解析速度。
附图说明
图1是本发明解析可扩展标记语言的方法的流程图。
图2a和图2b是本发明解析可扩展标记语言的方法的节点树示意图。
具体实施方式
下面结合附图详细说明本发明的具体实施方式。
本发明可扩展标记语言(XML)的解析的方法的基本思想为:将XML文档分成若干次解析,每次解析都形成一颗不完整的文档树,在每轮的若干次解析完成之后再来判断文档是否已经完全解析完成,若未完成,则继续解析,且对已经解析完成的部分释放内存或其他资源,直到XML文档全部解析完成。
为使本发明的特征和优点更加明显易懂,下面结合附图和具体实施方式对本发明作进一步详细说明。
如图1所示,本发明的解析包括以下步骤:
第一步:根据XML文档的具体内容,确定解析的标志节点和一次解析标志节点的预设个数。标志节点必须是某一元素节点,并且此元素节点有多个相似的兄弟节点或重复出现的元素节点,并从非易失存储器中读取XML文档的字符流。
第二步:解析XML文档。给解析器传入已处理XML文档的字符流的长度,若第一次解析,则传入0或清零,意味着文档尚未被解析。在解析XML文档过程中,设置一个计数器,当解析到一个标志节点时,计数器加1,并比较计数器的数值和第一步中设置的一次解析标志节点的预设个数,若计数器中的数值小于预设个数,意味着本次解析尚未完成,则继续解析,否则,停止本次解析,返回已处理XML文档的字符流的长度,若解析结束,则返回定值,如-1。
第三步:在应用程序中处理已解析的数据。
第四步:释放已解析完成的标志节点的父节点及其所有子节点所占用的内存或其他资源。若解析结束,则释放所有节点占用的内存或其他资源。
第五步:重复第二步、第三步和第四步,直到XML文档全部解析结束。
本发明的解析方法仅解析声明类型的节点以及元素节点,这两种类型的节点之外的定义为其他类型节点,其他类型节点直接忽略掉。
另外,本发明解析可扩展标记语言文档的关键字包括:“<?xml”、“?>”、“<tag>”和“</tag>”、<![CDATA[string]]>,其中tag为任意符合可扩展标记语言标签规范的字符串,string为任意字符串。
为进一步说明本发明的解析方法,下面结合具体的实施例详细说明本发明的方法。
手机联系人的备份文件的电话本条目重复出现,例如以下格式的手机联系人备份文件phoneBook.xml:
<?xml version=″1.0″encoding=″UTF-8″?>
<!--手机联系人备份-->
<PhoneBook>
<PhoneBookField>
<N>张三</N>
<TEL>010-86407225</TEL>
<HOMETEL/>
</PhoneBookField>
<PhoneBookField>
<N>李四</N>
<TEL>010-86112493</TEL>
</PhoneBookField>
<PhoneBookField>
<N>王五</N>
<TEL>010-86112494</TEL>
</PhoneBookField>
<PhoneBookField>
<N>赵一</N>
<TEL>010-86112455</TEL>
<CELLTEL></CELLTEL>
</PhoneBookField>
</PhoneBook>
第一步,根据文档的内容结构确定解析标志节点,按照前述,标志节点应该是重复出现的相同或相似的元素节点,与本实施例中,选择元素节点<PhoneBookField>作为标志节点,因为该节点重复出现了4次,并根据系统的内存情况确定一次解析标志节点的预设个数,这里设定为3。
第二步,从非易失存储器中读入文件phoneBook.xml的字节流,给解析器传入标志节点<PhoneBookField>、一次解析标志节点的个数3,以及已处理XML字符流的长度,即0。解析器会生成一颗如图2(a)中的一颗节点树,并返回当前已处理的文档的长度。在解析过程中解析器忽略了注释节点,如<!-- 手机联系人备份-->,且未链接空的元素节点<HOMETEL/>到节点树,并直接释放其占用的内存资源,即只解析具有内容的元素节点,对于空节点直接忽略。
第三步,在应用程序中处理已解析的数据。
第四步:释放标志节点的父节点及其所有子节点所占用的内存资源。即图2(a)中虚线框中的节点。
第五步:因为XML文档没有被完全解析完成,还有一个标志节点没有被解析,即“赵一”的数据没有被解析,因此还需要继续解析。给解析器传入标志节点<PhoneBookField>、一次解析标志节点的个数3,以及已处理XML字符流的长度,解析器会生成一颗如图2(b)中的一颗节点树,解析完成后返回解析结束标志-1,意味着文档已被完全解析完成。在解析过程中未链接空的元素节点<CELLTEL></CELLTEL>到节点树,而是直接释放其占用的内存资源。
第六步,在应用程序中处理已解析的数据。
第七步:因此时已经解析结束,释放图2(b)中所有节点所占用的内存资源。
以本发明所提供的方法解析XML文档,每轮解析过程中的每次解析完成后,都会释放节点所占用的内存资源,并且不将空的元素节点链接到节点树,另外直接忽略注释节点等不影响文档内容的节点,因此,所占用系统内存资源较少,另外,将一个XML文档进行拆解,进行多次解析,提升解析速度。
以上所述仅为本发明的较佳实施方式,本发明的保护范围并不以上述实施方式为限,但凡本领域普通技术人员根据本发明所揭示内容所作的等效修饰或变化,皆应纳入权利要求书中记载的保护范围内。
Claims (5)
1.一种解析可扩展标记语言的方法,其特征在于,该方法包括如下步骤:
提供一解析器,该解析器可从一存储器中读取可扩展标记语言文档;
选取文档中重复出现的元素节点作为标志节点,并且确定一次解析标志节点的预设个数;
向解析器中传输已解析文档的字符流的长度;
解析器解析文档;
将已解析的文档数据传递给应用程序处理;
释放解析过程中标志节点所占用的系统资源;
其中,释放解析过程中标志节点所占用的系统资源包括释放解析过程中空的元素节点占用的系统资源、单次解析后释放标志节点占用的系统资源、解析全部完成后所有节点占用的系统资源。
2.根据权利要求1所述的解析可扩展标记语言的方法,其特征在于:该方法还提供一个计数器,用以计算已解析的节点个数。
3.根据权利要求1所述的解析可扩展标记语言的方法,其特征在于:于解析文档过程中,空的元素节点不链接到节点树。
4.根据权利要求1或2或3所述的解析可扩展标记语言的方法,其特征在于:于解析文档过程中,声明节点与元素节点之外的其他节点直接被忽略。
5.根据权利要求1或2或3所述的解析可扩展标记语言的方法,其特征在于:解析可扩展标记语言文档的关键字包括:“<?xml”、“?>”、“<tag>”和“</tag>”、<![CDATA[string]]>,其中tag为任意符合可扩展标记语言标签规范的字符串,string为任意字符串。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN 200810204371 CN101446968B (zh) | 2008-12-10 | 2008-12-10 | 解析可扩展标记语言的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN 200810204371 CN101446968B (zh) | 2008-12-10 | 2008-12-10 | 解析可扩展标记语言的方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101446968A CN101446968A (zh) | 2009-06-03 |
CN101446968B true CN101446968B (zh) | 2013-07-17 |
Family
ID=40742646
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN 200810204371 Expired - Fee Related CN101446968B (zh) | 2008-12-10 | 2008-12-10 | 解析可扩展标记语言的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN101446968B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102012895A (zh) * | 2010-08-19 | 2011-04-13 | 上海酷吧信息技术有限公司 | 一种解析数据的方法 |
CN108509658B (zh) * | 2018-04-28 | 2021-01-26 | 中国联合网络通信集团有限公司 | 一种xml文件的解析方法和装置 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2007068194A1 (fr) * | 2005-12-16 | 2007-06-21 | Huawei Technologies Co., Ltd. | Procede permettant d'effectuer une actualisation de lots dans un mecanisme d'abonnement, abonne et terminal de notificateur |
CN101017458A (zh) * | 2007-03-02 | 2007-08-15 | 北京邮电大学 | 基于源代码静态分析的软件安全代码分析器及其检测方法 |
CN101251860A (zh) * | 2008-03-10 | 2008-08-27 | 北京航空航天大学 | 一种Web信息发布管理系统与方法 |
-
2008
- 2008-12-10 CN CN 200810204371 patent/CN101446968B/zh not_active Expired - Fee Related
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2007068194A1 (fr) * | 2005-12-16 | 2007-06-21 | Huawei Technologies Co., Ltd. | Procede permettant d'effectuer une actualisation de lots dans un mecanisme d'abonnement, abonne et terminal de notificateur |
CN101017458A (zh) * | 2007-03-02 | 2007-08-15 | 北京邮电大学 | 基于源代码静态分析的软件安全代码分析器及其检测方法 |
CN101251860A (zh) * | 2008-03-10 | 2008-08-27 | 北京航空航天大学 | 一种Web信息发布管理系统与方法 |
Also Published As
Publication number | Publication date |
---|---|
CN101446968A (zh) | 2009-06-03 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
AU2012203071B2 (en) | Computer-implemented method, system and computer program product for displaying a user interface component | |
CN109522018B (zh) | 页面处理方法、装置及存储介质 | |
CN101361063B (zh) | 支持基于规则的文档内容挖掘的系统与方法 | |
US20020143823A1 (en) | Conversion system for translating structured documents into multiple target formats | |
CN101739462B (zh) | 可扩展标记语言编码方法、解码方法和客户端 | |
CN101145157B (zh) | 一种xml格式嵌入式设备特征信息解析方法 | |
CN104679903B (zh) | 一种数据表的操作方法及装置 | |
CN102411602B (zh) | 一种基于 fpga 实现的xml 并行投机解析方法 | |
CN108664546B (zh) | Xml数据结构转换方法和装置 | |
CN103235757B (zh) | 基于自动化造数对输入域测试对象进行测试的装置和方法 | |
CN102508887A (zh) | 一种数字电视交互服务标记语言解析系统及方法 | |
US20200183670A1 (en) | System and method for transforming cold fusion technology environment to open source environment | |
CN101446968B (zh) | 解析可扩展标记语言的方法 | |
CN118245050A (zh) | 前端框架组件自动转换方法、系统、电子设备及存储介质 | |
CN113971044A (zh) | 组件文档生成方法、装置、设备及可读存储介质 | |
Agnoloni et al. | xmLegesEditor: an opensource visual XML editor for supporting legal national standards | |
Stefanov | Object-Oriented JavaScript | |
US20050177788A1 (en) | Text to XML transformer and method | |
CN115328353A (zh) | 一种生成iconfont资源的方法、装置以及介质 | |
CN101446955A (zh) | 一种浏览器的实现方法、装置和系统 | |
CN102006512A (zh) | 应用sax解析引擎的数字电视hsml解析方法及系统 | |
Hoeller et al. | Efficient XML data and query integration in the wireless sensor network engineering process | |
CN101876901B (zh) | 一种用xml显示网管单盘分块状态的方法 | |
Felden | The SKilL Language V1. 0 | |
CN109597624A (zh) | 一种sql格式化的方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20130717 Termination date: 20151210 |
|
EXPY | Termination of patent right or utility model |