CN116644213A - Xml文件读取方法、装置、设备及存储介质 - Google Patents

Xml文件读取方法、装置、设备及存储介质 Download PDF

Info

Publication number
CN116644213A
CN116644213A CN202310672194.9A CN202310672194A CN116644213A CN 116644213 A CN116644213 A CN 116644213A CN 202310672194 A CN202310672194 A CN 202310672194A CN 116644213 A CN116644213 A CN 116644213A
Authority
CN
China
Prior art keywords
content
tag
xml file
reading
type
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.)
Pending
Application number
CN202310672194.9A
Other languages
English (en)
Inventor
何安胜
李伟
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Shenzhen Fulin Technology Co Ltd
Original Assignee
Shenzhen Fulin Technology Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Shenzhen Fulin Technology Co Ltd filed Critical Shenzhen Fulin Technology Co Ltd
Priority to CN202310672194.9A priority Critical patent/CN116644213A/zh
Publication of CN116644213A publication Critical patent/CN116644213A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/80Information retrieval; Database structures therefor; File system structures therefor of semi-structured data, e.g. markup language structured data such as SGML, XML or HTML
    • G06F16/83Querying
    • G06F16/832Query formulation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/80Information retrieval; Database structures therefor; File system structures therefor of semi-structured data, e.g. markup language structured data such as SGML, XML or HTML
    • G06F16/83Querying
    • G06F16/835Query processing
    • G06F16/8358Query translation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/80Information retrieval; Database structures therefor; File system structures therefor of semi-structured data, e.g. markup language structured data such as SGML, XML or HTML
    • G06F16/83Querying
    • G06F16/835Query processing
    • G06F16/8365Query optimisation
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Data Mining & Analysis (AREA)
  • Databases & Information Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Mathematical Physics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本申请属于数据分析领域,涉及一种XML文件读取方法,包括获取待读取的XML文件,利用类函数定义XML文件的Root节点;利用元素函数获取Root节点之后的内容元素,并利用栈变量定义内容元素中的父子元素关系;利用预设的解码器对内容元素进行遍历,得到内容标签;利用类型语句识别内容标签对应的标签类型,并根据父子元素关系判断标签类型是否为结束标签;当标签类型不为结束标签,获取标签类型在XML文件中的标签顺序,根据标签顺序依次读取标签类型中的内容,得到XML文件的读取结果;当标签类型为结束标签,则停止XML文件的读取。本申请还提供一种XML装置、计算机设备及存储介质。本申请可以提高XML文件的读取效率。

Description

XML文件读取方法、装置、设备及存储介质
技术领域
本申请涉及数据分析技术领域,尤其涉及一种XML文件读取方法、装置、设备及存储介质。
背景技术
XML是一种结构化的数据交换格式,它可以对数据进行结构定义和编码,使数据能够方便地在不同系统之间传输和存储,传统的XML文件读取方法是通过利用XML解析器将整个XML文件读取进内存,把该XML文件转化为XML DOM对象,并对外提供编程接口,程序员进而通过接口读取XML文件。
随着大数据的发展,XML文件的内容越来越大,读取大XML文件也成为主流。但是,这种传统的文件读取方法不仅需要占用较多服务器内存,在加载XML文件的过程中还需要耗费大量的时间,导致XML文件的读取效率较低。
发明内容
本发明提供一种XML文件读取方法、装置、设备及存储介质,其主要目的是提高XML文件的读取效率。
为了解决上述技术问题,本申请实施例提供一种XML文件读取方法,采用了如下所述的技术方案:
获取待读取的XML文件,利用预定义的类函数定义所述XML文件的Root节点;
利用预定义的元素函数获取所述Root节点之后的内容元素,并利用预定义的栈变量定义所述内容元素中的父子元素关系;
利用预设的解码器对所述内容元素进行遍历,得到内容标签;
利用预设的类型语句识别所述内容标签对应的标签类型,并根据所述父子元素关系判断所述标签类型是否为结束标签;
当所述标签类型不为结束标签,获取所述标签类型在所述XML文件中的标签顺序,根据所述标签顺序依次读取所述标签类型中的内容,得到所述XML文件的读取结果;
当所述标签类型为结束标签,则停止所述XML文件的读取。
进一步的,所述利用预定义的栈变量定义所述内容元素中的父子元素关系,包括:
利用所述栈变量对所述内容元素进行入栈操作,以将所述内容元素存储至所述栈变量中,识别所述内容元素中需要读取的当前内容元素;
判断所述当前内容元素是否存在父元素,若所述当前内容元素存在父元素,则将所述当前内容元素添加到所述父元素的子元素数组中,得到所述当前内容元素的父子元素关系。
进一步的,所述利用预定义的元素函数获取所述Root节点之后的内容元素,包括:
利用所述元素函数调用游标对所述Root节点之后的任一元素进行读取,输出所述游标对应的元素对象;
判断所述元素对象是否为结束标识符;
当所述元素对象为结束标识符,则输出所述XML文件中的所有元素对象,并将所述元素对象作为所述内容元素;
当所述元素对象不为结束标识符,则继续调用所述游标读取所述XML文件中的下一个元素对象,直至所述元素对象为结束标识符,输出所述XML文件中的所有元素对象,并将所述元素对象作为所述内容元素。
进一步的,所述根据所述父子元素关系判断所述标签类型是否为结束标签,包括:
获取所述标签类型中的内容结束标签,根据所述父子元素关系获取所述内容结束标签的标签父元素;
判断所述标签父元素的输出内容是否为结束标识符;
当所述标签父元素的输出内容不是结束标识符,则确定所述标签类型不为结束标签;
当所述标签父元素的输出内容是结束标识符,则确定所述标签类型为结束标签。
进一步的,所述根据所述标签顺序依次读取所述标签类型中的内容,得到所述XML文件的读取结果,包括:
利用所述预设的第二令牌函数解析所述XML文件中所述标签类型为内容起始标签的内容属性值、所述标签类型为文本标签的文本内容、所述标签类型为注释标签的注释内容;
根据所述父子元素关系及所述标签顺序将输出所述内容属性值、所述文本内容及注释内容作为所述XML文件的读取结果。
进一步的,所述利用所述预设的第二令牌函数解析所述XML文件中所述标签类型为内容起始标签的内容属性值、所述标签类型为文本标签的文本内容、所述标签类型为注释标签的注释内容之后,所述方法还包括:
判断所述内容属性值中的名称属性值是否属于所述Root节点;
当所述内容属性值中的名称属性值不属于所述Root节点,则确定所述内容属性值为所述内容起始标签的读取结果;
当所述内容属性值中的名称属性值属于所述Root节点,则所述内容起始标签对应的内容无需读取。
进一步的,所述利用预设的解码器对所述内容元素进行遍历,得到内容标签,包括:
利用预设的第一令牌函数逐一识别所述内容元素的标记符号,当所述标记符号为结束标识符,则得到所述内容元素对应的所有内容标签,其中,所述解码器中包括所述第一令牌函数。
为了解决上述技术问题,本申请实施例还提供一种XML文件读取装置,采用了如下所述的技术方案:
获取模块,用于获取待读取的XML文件,利用预定义的类函数定义所述XML文件的Root节点;
定义模块,用于利用预定义的元素函数获取所述Root节点之后的内容元素,并利用预定义的栈变量定义所述内容元素中的父子元素关系;
遍历模块,用于利用预设的解码器对所述内容元素进行遍历,得到内容标签;
识别模块,用于利用预设的类型语句识别所述内容标签对应的标签类型,并根据所述父子元素关系判断所述标签类型是否为结束标签;及
读取模块,用于当所述标签类型不为结束标签,获取所述标签类型在所述XML文件中的标签顺序,根据所述标签顺序依次读取所述标签类型中的内容,得到所述XML文件的读取结果;当所述标签类型为结束标签,则停止所述XML文件的读取。
为了解决上述技术问题,本申请实施例还提供一种计算机设备,采用了如下所述的技术方案:
存储器,存储至少一个计算机程序;及
处理器,执行所述存储器中存储的计算机程序以实现上述所述的XML文件读取。
为了解决上述技术问题,本申请实施例还提供一种计算机可读存储介质,采用了如下所述的技术方案:
所述计算机可读存储介质中存储有至少一个计算机程序,所述至少一个计算机程序被电子设备中的处理器执行以实现上述所述的XML文件读取。
与现有技术相比,本申请主要有以下有益效果:
本发明实施例中,首先通过利用预定义的类函数定义XML文件的Root节点,可以确定占用XML文件最大内存的Root节点之下的单个完整节点的大小,减少了读取XML文件的内存占用时间,便于提高后续的XML文件读取效率;其次,通过获取Root节点之后的XML文件中的内容元素,能够逐个读取文档中的内容元素,实现流式处理XML文件的元素,提高后续XML文件读取的效率,利用预定义的栈变量定义内容元素中的父子元素关系,能够通过栈变量捕捉不同内容元素的父子关系,正确的表示XML文件的层次结构,通过利用预设的解码器对内容元素进行遍历,得到内容标签,能够便于后续依照XML的实际结构捕捉每个元素的完整内容;最后,通过识别内容标签对应的标签类型,并判断标签类型是否为结束标签,当标签类型不为结束标签,能够随时读取标签类型对应的标签内容,得到XML文件的读取结果,以实现在XML文件读取的过程中无需加载完整的XML文件,减少XML文件读取所需的时间,提高XML文件的读取效率。因此本发明提出的XML文件读取方法、装置、设备及存储介质可以提高XML文件的读取效率。
附图说明
为了更清楚地说明本申请中的方案,下面将对本申请实施例描述中所需要使用的附图作一个简单介绍,显而易见地,下面描述中的附图是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本申请可以应用于其中的示例性系统架构图;
图2是根据本申请的XML文件读取方法的一个实施方式的流程图;
图3是本根据本申请的XML文件读取系统中所述布控端的一个实施例的结构图;
图4是根据本申请的计算机设备的一个实施例的结构示意图。
具体实施方式
本发明实施例提供的数据格式的确定方法应用于数据处理系统除非另有定义,本文所使用的所有的技术和科学术语与属于本申请的技术领域的技术人员通常理解的含义相同;本文中在申请的说明书中所使用的术语只是为了描述具体的实施例的目的,不是旨在于限制本申请;本申请的说明书和权利要求书及上述附图说明中的术语“包括”和“具有”以及它们的任何变形,意图在于覆盖不排他的包含。本申请的说明书和权利要求书或上述附图中的术语“第一”、“第二”等是用于区别不同对象,而不是用于描述特定顺序。
在本文中提及“实施例”意味着,结合实施例描述的特定特征、结构或特性可以包含在本申请的至少一个实施例中。在说明书中的各个位置出现该短语并不一定均是指相同的实施例,也不是与其它实施例互斥的独立的或备选的实施例。本领域技术人员显式地和隐式地理解的是,本文所描述的实施例可以与其它实施例相结合。
为了使本技术领域的人员更好地理解本申请方案,下面将结合附图,对本申请实施例中的技术方案进行清楚、完整地描述。
如图1所示,系统架构100可以包括终端设备101、102、103,网络104和服务器105。网络104用以在终端设备101、102、103和服务器105之间提供通信链路的介质。网络104可以包括各种连接类型,例如有线、无线通信链路或者光纤电缆等等。
用户可以使用终端设备101、102、103通过网络104与服务器105交互,以接收或发送消息等。终端设备101、102、103上可以安装有各种通讯客户端应用,例如网页浏览器应用、购物类应用、搜索类应用、即时通信工具、邮箱客户端、社交线上平台软件等。
终端设备101、102、103可以是具有显示屏并且支持网页浏览的各种电子设备,包括但不限于智能手机、平板电脑、电子书阅读器、MP3播放器(Moving Picture ExpertsGroup Audio Layer III,动态影像专家压缩标准音频层面3)、MP4(Moving PictureExperts Group Audio Layer IV,动态影像专家压缩标准音频层面4)播放器、膝上型便携计算机和台式计算机等等。
服务器105可以是提供各种服务的服务器,例如对终端设备101、102、103上显示的页面提供支持的后台服务器。
需要说明的是,本申请实施例所提供的XML文件读取方法一般由服务器/终端设备执行,相应地,XML文件读取系统一般设置于服务器/终端设备中。
应该理解,图1中的终端设备、网络和服务器的数目仅仅是示意性的。根据实现需要,可以具有任意数目的终端设备、网络和服务器。
继续参考图2,示出了根据本申请提出的XML文件读取方法的一个实施例的流程图。其中,所述XML文件读取方法,包括以下步骤:
S210获取待读取的XML文件,利用预定义的类函数定义所述XML文件的Root节点。
本发明实施例中,所述待读取的XML文件是指待读取可扩展标记语言文件,通常用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言文件,且待读取的XML文件可以为流式文件。
本发明实施例中,所述Root节点是指XML文件的最外层元素,该元素包括了整个XML文件的内容,且该元素是XML文件的起始点。
本发明实施例中,通过获取待读取的XML文件,利用预定义的类函数定义所述XML文件的Root节点,可以确定占用XML文件最大内存的Root节点之下的单个完整节点的大小,减少了读取XML文件的内存占用时间,便于提高后续的XML文件读取效率。
本发明一实施例中,所述预定义的类函数可以为NewXmlScanner函数,通过该函数对XML文件进行定义,可以返回一个XmlScanner对象,该对象即为rootTag,通过返回的rootTag可以定义Root元素字符,且通过该函数可以传递XML文件流进XML解析器中,便于后续进行XML文件的读取。
S220利用预定义的元素函数获取所述Root节点之后的内容元素,并利用预定义的栈变量定义所述内容元素中的父子元素关系。
本发明实施例中,所述预定义的元素函数可以为NextElement函数,该函数通过调用游标或指针逐个读取Root节点之后的元素,并逐一返回每个元素对应的Element对象。所述内容元素是指Root元素底下需要读取的单个完整的XML元素,包括但不限于当前XML的标签名称、XML属性及属性值、XML的文本内容、XML子元素数组及父元素数组等。
本发明实施例中,所述栈变量是一种具有“后进先出”特点的数据结构,通过栈变量的“后进先出”的特点能够实现将内容元素的子元素包含在父元素中,从而保证内容元素正确的层次结构,以准确表示出XML文件的结构。
本发明实施例中,所述父子元素关系即为XML文件中的标签关系,比如,当XML文件中标签project嵌套标签description,则标签description为子元素,标签project为父元素。
本发明实施例中,通过利用预定义的元素函数获取所述Root节点之后的内容元素,能够逐个读取文档中的内容元素,实现流式处理XML文件的元素,提高后续XML文件读取的效率,并利用预定义的栈变量定义所述内容元素中的父子元素关系,能够捕捉内容元素的父子关系,保证内容元素正确的层次结构,以准确表示出XML文件的结构,便于提高后续读取XML文件的准确性。
本发明实施例中,所述利用预定义的元素函数获取所述Root节点之后的内容元素,包括:
利用所述元素函数调用游标对所述Root节点之后的任一元素进行读取,输出所述游标对应的元素对象;
判断所述元素对象是否为结束标识符;
当所述元素对象为结束标识符,则输出所述XML文件中的所有元素对象,并将所述元素对象作为所述内容元素;
当所述元素对象不为结束标识符,则继续调用所述游标读取所述XML文件中的下一个元素对象,直至所述元素对象为结束标识符,输出所述XML文件中的所有元素对象,并将所述元素对象作为所述内容元素。
其中,利用所述元素函数调用游标对所述Root节点之后的任一元素进行读取,并返回该元素对象的元素对象(即Element对象),通过游标对元素对象进行逐一读取,可以无需加载整个XML文件,提高后续XML文件读取的效率。
本发明一实施例中,所述结束标识符可以nil符号,通过调用游标下移读取元素,若是返回的元素对象为nil,则说明该元素对象为结束标识符,并将nil之前读取所有的元素对象作为内容元素;若是返回的元素对象不为nil,则说明XML文件内容读取未完成,需要继续调用游标进行读取,直至返回nil,以获取完整的内容元素,保证后续XML文件读取的准确性。
进一步地,本发明实施例中,所述利用预定义的栈变量定义所述内容元素中的父子元素关系,包括:
利用所述栈变量对所述内容元素进行入栈操作,以将所述内容元素存储至所述栈变量中,识别所述内容元素中需要读取的当前内容元素;
判断所述当前内容元素是否存在父元素,若所述当前内容元素存在父元素,则将所述当前内容元素添加到所述父元素的子元素数组中,得到所述当前内容元素的父子元素关系。
其中,所述入栈操作可以通过调用stack.push(内容元素)进行入栈操作,实现将内容元素存储在栈变量中,并通过栈变量定义内容元素的父子关系。
本发明一实施例中,当解析到当前内容元素A时,先获取当前内容元素A是否存在上层的嵌套内容元素B,若当前内容元素A存在上层嵌套元素,则当前内容元素A存在父元素B,并将当前内容元素A添加到内容元素B的Children数组中,若当前内容元素A不存在上层嵌套函数,则说明当前内容元素A为最后一个父元素,不存在父子元素关系,通过后续判断父元素是否为最后一个父元素,可以确定读取的XML文件的末尾元素。
S230利用预设的解码器对所述内容元素进行遍历,得到内容标签。
本发明实施例中,所述预设的解码器可以为Golang系统库的encoding/xml.NewDecoder,通过该解码器可以对XML文件中的所有内容元素进行解码,从而确定每个内容元素对应的内容标签,以实现XML文件的读取。所述内容标签是指解码器对内容元素进行的标记,比如,StartElement、EndElement、CharData及Comment等。
本发明实施例中,通过利用预设的解码器对所述内容元素进行遍历,得到内容标签,能够便于后续依照XML的实际结构捕捉每个元素的完整内容。
本发明实施例中,所述利用预设的解码器对所述内容元素进行遍历,得到内容标签,包括:
利用预设的第一令牌函数逐一识别所述内容元素的标记符号,当所述标记符号为结束标识符,则得到所述内容元素对应的所有内容标签,其中,所述解码器中包括所述第一令牌函数。
其中,所述第一令牌函数可以为RawToken函数;所述标记符号即为内容标签。通过RawToken函数对输入解码器内容元素进行标记,并返回内容元素对应的内容标签,直至NextToken函数对内容元素进行的标记,返回的结果为结束标识符(如nil),则代表读取到XML文件末尾。
S240利用预设的类型语句识别所述内容标签对应的标签类型,并根据所述父子元素关系判断所述标签类型是否为结束标签。
本发明实施例中,所述预设的类型语句可以为switch语句,主要作用为判断内容标签的标签类型,其中,所述标签类型可以包括、内容开始标签、内容结束标签、文本标签及注释标签等;所述结束标签是指表示内容元素对应的末尾标签,可以为EndElement token。
本发明一实施例中,若利用switch语句捕捉到内容标签中的StartElement时,代表捕捉到XML文件的开始符号,输出内容开始标签(如StartElement token);若捕捉到内容标签中的EndElement时,代表捕捉到XML文件的结束符号,输出内容结束标签(如EndElement token);若捕捉到内容标签中的CDATA文本字符串,输出文本标签(如CharDatatoken);若捕捉到内容标签中的Comment,代表捕捉到XML文件的注释块符号,输出注释标签(如CharData token)。
本发明实施例中,通过利用预设的类型语句识别所述内容标签对应的标签类型,并根据所述父子元素关系判断所述标签类型是否为结束标签,能够随时读取标签类型对应的标签内容,得到所述XML文件的读取结果,以实现在XML文件读取的过程中无需加载完整的XML文件,减少XML文件读取所需的时间,提高XML文件的读取效率。
作为本发明的一个实施例,所述根据所述父子元素关系判断所述标签类型是否为结束标签,包括:
获取所述标签类型中的内容结束标签,根据所述父子元素关系获取所述内容结束标签的标签父元素;
判断所述标签父元素的输出内容是否为结束标识符;
当所述标签父元素的输出内容不是结束标识符,则确定所述标签类型不为结束标签;
当所述标签父元素的输出内容是结束标识符,则确定所述标签类型为结束标签。
其中,所述内容结束标签可以为EndElement token,通过获取内容结束标签对应内容元素的父子元素关系,查找该内容标签的标签父元素。
本发明实施例中,有一内容结束标签为C调用stack.pop(C)把栈顶部的元素C进行出栈,若C的父元素不为结束标识符(nil),则代表当前的标签类型不为结束标签;若C的父元素为nil,则代表标签类型为结束标签。
S250当所述标签类型不为结束标签,获取所述标签类型在所述XML文件中的标签顺序,根据所述标签顺序依次读取所述标签类型中的内容,得到所述XML文件的读取结果。
本发明实施例中,所述标签顺序是指XML文件中内容元素的顺序,比如,有一XML文件中的内容为</Project>、</description>、<CDATA>、<description>及<Project id=“2”>,则根据XML文件的先后顺序的输出应该为Project id=“2”、description及CDATA的内容。
作为本发明的一个实施例,所述根据所述标签顺序依次读取所述标签类型中的内容,得到所述XML文件的读取结果,包括:
利用预设的第二令牌函数解析所述XML文件中所述标签类型为内容起始标签的内容属性值、所述标签类型为文本标签的文本内容、所述标签类型为注释标签的注释内容;
根据所述父子元素关系及所述标签顺序将输出所述内容属性值、所述文本内容及注释内容作为所述XML文件的读取结果。
其中,所述预设的第二令牌函数可以为Token函数,且该第二令牌函数与上述第一令牌函数可以相同,也可以不相同,具体由实际场景决定。
本发明一实施例中,通过Token函数可以解析出内容起始标签(如StartElementtoken)包含Name以及Attr的内容属性值,其中,Name属性代表Tag名称,Attr属性代表当前XML标签的所有属性及属性值;所述文本内容可以通过Token函数解析CharData token,得到包含CDATA文本字符串,并通过调用Element.setText(text)进行文本内容保存;所述注释内容可以通过Token函数解析Comment token,返回完整的段注释,当需从XML文件的注释中获取信息时,可以对注释内容按换行符进行分割,并遍历注释文本数组。
本发明实施例中,通过Token函数对标签类型中的内容进行解析,可以保证返回的StartElement token和EndElement token都会正确地嵌套和匹配,若Token遇到了一个意料之外的结束元素,又或者在所有预期的结束元素之前遇到了一个EOF,则Token将返回一个错误,从而保证读取XML文件的准确性。
进一步的,本发明实施例中,所述利用预设的第二令牌函数解析所述XML文件中所述标签类型为内容起始标签的内容属性值、所述标签类型为文本标签的文本内容、所述标签类型为注释标签的注释内容之后,所述方法还包括:
判断所述内容属性值中的名称属性值是否属于所述Root节点;
当所述内容属性值中的名称属性值不属于所述Root节点,则确定所述内容属性值为所述内容起始标签的读取结果;
当所述内容属性值中的名称属性值属于所述Root节点,则所述内容起始标签对应的内容无需读取。
本发明实施例中,Root节点的名称可以为任一有效的XML元素名称,通过判断所述内容属性值中的名称属性值是否属于所述Root节点,能够在Token函数处理中过滤掉Root,由于Root节点是XML文件的起始点,主要作用是描述XML文件的内容或目的,在XML文件的读取过程中,Root节点不包括XML内容,但是又占据一定的内存,所以读取XML文件的过程中过滤Root,能够保证读取的XML文件的准确率的同时,提高XML文件的读取效率。
S260当所述标签类型为结束标签,则停止所述XML文件的读取。
本发明实施例中,当所述标签类型为结束标签,则表示已经读取至XML文件的最后一个结束符号,可以返回该结束标签对应的一个完整XML行内容,并表示XML文件读取完成。
与现有技术相比,本申请实施例主要有以下有益效果:
本发明实施例中,首先通过利用预定义的类函数定义XML文件的Root节点,可以确定占用XML文件最大内存的Root节点之下的单个完整节点的大小,减少了读取XML文件的内存占用时间,便于提高后续的XML文件读取效率;其次,通过获取Root节点之后的XML文件中的内容元素,能够逐个读取文档中的内容元素,实现流式处理XML文件的元素,提高后续XML文件读取的效率,利用预定义的栈变量定义内容元素中的父子元素关系,能够通过栈变量捕捉不同内容元素的父子关系,正确的表示XML文件的层次结构,通过利用预设的解码器对内容元素进行遍历,得到内容标签,能够便于后续依照XML的实际结构捕捉每个元素的完整内容;最后,通过识别内容标签对应的标签类型,并判断标签类型是否为结束标签,当标签类型不为结束标签,能够随时读取标签类型对应的标签内容,得到XML文件的读取结果,以实现在XML文件读取的过程中无需加载完整的XML文件,减少XML文件读取所需的时间,提高XML文件的读取效率。因此本发明实施例提出的XML文件读取方法可以提高XML文件的读取效率。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,该计算机程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,前述的存储介质可为磁碟、光盘、只读存储记忆体(Read-Only Memory,ROM)等非易失性存储介质,或随机存储记忆体(Random Access Memory,RAM)等。
应该理解的是,虽然附图的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,其可以以其他的顺序执行。而且,附图的流程图中的至少一部分步骤可以包括多个子步骤或者多个阶段,这些子步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,其执行顺序也不必然是依次进行,而是可以与其他步骤或者其他步骤的子步骤或者阶段的至少一部分轮流或者交替地执行。
进一步参考图3,作为对上述图2所示方法的实现,本申请提供了一种XML文件读取装置310的一个实施例,该装置实施例与图2所示的方法实施例相对应,该装置具体可以应用于各种电子设备中。
本发明实施例提供的一种XML文件读取系统,所述XML文件读取系统包括;
获取模块311,用于获取待读取的XML文件,利用预定义的类函数定义所述XML文件的Root节点;
定义模块312,用于利用预定义的元素函数获取所述Root节点之后的内容元素,并利用预定义的栈变量定义所述内容元素中的父子元素关系;
遍历模块313,用于利用预设的解码器对所述内容元素进行遍历,得到内容标签;
识别模块314,用于利用预设的类型语句识别所述内容标签对应的标签类型,并根据所述父子元素关系判断所述标签类型是否为结束标签;及
读取模块315,用于当所述标签类型不为结束标签,获取所述标签类型在所述XML文件中的标签顺序,根据所述标签顺序依次读取所述标签类型中的内容,得到所述XML文件的读取结果;当所述标签类型为结束标签,则停止所述XML文件的读取。
与现有技术相比,本申请实施例主要有以下有益效果:
本发明实施例中,首先通过利用预定义的类函数定义XML文件的Root节点,可以确定占用XML文件最大内存的Root节点之下的单个完整节点的大小,减少了读取XML文件的内存占用时间,便于提高后续的XML文件读取效率;其次,通过获取Root节点之后的XML文件中的内容元素,能够逐个读取文档中的内容元素,实现流式处理XML文件的元素,提高后续XML文件读取的效率,利用预定义的栈变量定义内容元素中的父子元素关系,能够通过栈变量捕捉不同内容元素的父子关系,正确的表示XML文件的层次结构,通过利用预设的解码器对内容元素进行遍历,得到内容标签,能够便于后续依照XML的实际结构捕捉每个元素的完整内容;最后,通过识别内容标签对应的标签类型,并判断标签类型是否为结束标签,当标签类型不为结束标签,能够随时读取标签类型对应的标签内容,得到XML文件的读取结果,以实现在XML文件读取的过程中无需加载完整的XML文件,减少XML文件读取所需的时间,提高XML文件的读取效率。因此本发明实施例提出的XML文件读取方装置可以提高XML文件的读取效率。
为解决上述技术问题,本申请实施例还提供计算机设备。具体请参阅图4,图4为本实施例计算机设备基本结构框图。
所述计算机设备4包括通过系统总线相互通信连接存储器41、处理器42、网络接口43。需要指出的是,图中仅示出了具有组件41-43的计算机设备4,但是应理解的是,并不要求实施所有示出的组件,可以替代的实施更多或者更少的组件。其中,本技术领域技术人员可以理解,这里的计算机设备是一种能够按照事先设定或存储的指令,自动进行数值计算和/或信息处理的设备,其硬件包括但不限于微处理器、专用集成电路(ApplicationSpecific Integrated Circuit,ASIC)、可编程门阵列(Field-Programmable GateArray,FPGA)、数字处理器(Digital Signal Processor,DSP)、嵌入式设备等。
所述计算机设备可以是桌上型计算机、笔记本、掌上电脑及云端服务器等计算设备。所述计算机设备可以与用户通过键盘、鼠标、遥控器、触摸板或声控设备等方式进行人机交互。
所述存储器41至少包括一种类型的可读存储介质,所述可读存储介质包括闪存、硬盘、多媒体卡、卡型存储器(例如,SD或DX存储器等)、随机访问存储器(RAM)、静态随机访问存储器(SRAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、可编程只读存储器(PROM)、磁性存储器、磁盘、光盘等。在一些实施例中,所述存储器41可以是所述计算机设备4的内部存储单元,例如该计算机设备4的硬盘或内存。在另一些实施例中,所述存储器41也可以是所述计算机设备4的外部存储设备,例如该计算机设备4上配备的插接式硬盘,智能存储卡(Smart Media Card,SMC),安全数字(Secure Digital,SD)卡,闪存卡(FlashCard)等。当然,所述存储器41还可以既包括所述计算机设备4的内部存储单元也包括其外部存储设备。本实施例中,所述存储器41通常用于存储安装于所述计算机设备4的操作系统和各类应用软件,例如XML文件读取方法的程序代码等。此外,所述存储器41还可以用于暂时地存储已经输出或者将要输出的各类数据。
所述处理器42在一些实施例中可以是中央处理器(Central Processing Unit,CPU)、控制器、微控制器、微处理器、或其他数据处理芯片。该处理器42通常用于控制所述计算机设备4的总体操作。本实施例中,所述处理器42用于运行所述存储器41中存储的程序代码或者处理数据,例如运行所述XML文件读取方法的程序代码。
所述网络接口43可包括无线网络接口或有线网络接口,该网络接口43通常用于在所述计算机设备4与其他电子设备之间建立通信连接。
本申请还提供了另一种实施方式,即提供一种计算机可读存储介质,所述计算机可读存储介质存储有所述XML文件读取方法程序,所述XML文件读取方法程序可被至少一个处理器执行,以使所述至少一个处理器执行如上述的XML文件读取方法的步骤。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件线上平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,空调器,或者网络设备等)执行本申请各个实施例所述的方法。
本申请可用于众多通用或专用的计算机系统环境或配置中。例如:个人计算机、服务器计算机、手持设备或便携式设备、平板型设备、多处理器系统、基于微处理器的系统、置顶盒、可编程的消费电子设备、网络PC、小型计算机、大型计算机、包括以上任何系统或设备的分布式计算环境等等。本申请可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。也可以在分布式计算环境中实践本申请,在这些分布式计算环境中,由通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块可以位于包括存储设备在内的本地和远程计算机存储介质中。
显然,以上所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例,附图中给出了本申请的较佳实施例,但并不限制本申请的专利范围。本申请可以以许多不同的形式来实现,相反地,提供这些实施例的目的是使对本申请的公开内容的理解更加透彻全面。尽管参照前述实施例对本申请进行了详细的说明,对于本领域的技术人员来而言,其依然可以对前述各具体实施方式所记载的技术方案进行修改,或者对其中部分技术特征进行等效替换。凡是利用本申请说明书及附图内容所做的等效结构,直接或间接运用在其他相关的技术领域,均同理在本申请专利保护范围之内。

Claims (10)

1.一种XML文件读取方法,其特征在于,包括下述步骤:
获取待读取的XML文件,利用预定义的类函数定义所述XML文件的Root节点;
利用预定义的元素函数获取所述Root节点之后的内容元素,并利用预定义的栈变量定义所述内容元素中的父子元素关系;
利用预设的解码器对所述内容元素进行遍历,得到内容标签;
利用预设的类型语句识别所述内容标签对应的标签类型,并根据所述父子元素关系判断所述标签类型是否为结束标签;
当所述标签类型不为结束标签,获取所述标签类型在所述XML文件中的标签顺序,根据所述标签顺序依次读取所述标签类型中的内容,得到所述XML文件的读取结果;
当所述标签类型为结束标签,则停止所述XML文件的读取。
2.根据权利要求1所述的XML文件读取方法,其特征在于,所述利用预定义的栈变量定义所述内容元素中的父子元素关系,包括:
利用所述栈变量对所述内容元素进行入栈操作,以将所述内容元素存储至所述栈变量中,识别所述内容元素中需要读取的当前内容元素;
判断所述当前内容元素是否存在父元素,若所述当前内容元素存在父元素,则将所述当前内容元素添加到所述父元素的子元素数组中,得到所述当前内容元素的父子元素关系。
3.根据权利要求1所述的XML文件读取方法,其特征在于,所述利用预定义的元素函数获取所述Root节点之后的内容元素,包括:
利用所述元素函数调用游标对所述Root节点之后的任一元素进行读取,输出所述游标对应的元素对象;
判断所述元素对象是否为结束标识符;
当所述元素对象为结束标识符,则输出所述XML文件中的所有元素对象,并将所述元素对象作为所述内容元素;
当所述元素对象不为结束标识符,则继续调用所述游标读取所述XML文件中的下一个元素对象,直至所述元素对象为结束标识符,输出所述XML文件中的所有元素对象,并将所述元素对象作为所述内容元素。
4.根据权利要求1所述的XML文件读取方法,其特征在于,所述根据所述父子元素关系判断所述标签类型是否为结束标签,包括:
获取所述标签类型中的内容结束标签,根据所述父子元素关系获取所述内容结束标签的标签父元素;
判断所述标签父元素的输出内容是否为结束标识符;
当所述标签父元素的输出内容不是结束标识符,则确定所述标签类型不为结束标签;
当所述标签父元素的输出内容是结束标识符,则确定所述标签类型为结束标签。
5.根据权利要求1所述的XML文件读取方法,其特征在于,所述根据所述标签顺序依次读取所述标签类型中的内容,得到所述XML文件的读取结果,包括:
利用所述预设的第二令牌函数解析所述XML文件中所述标签类型为内容起始标签的内容属性值、所述标签类型为文本标签的文本内容、所述标签类型为注释标签的注释内容;
根据所述父子元素关系及所述标签顺序将输出所述内容属性值、所述文本内容及注释内容作为所述XML文件的读取结果。
6.根据权利要求5所述的XML文件读取方法,其特征在于,所述利用所述预设的第二令牌函数解析所述XML文件中所述标签类型为内容起始标签的内容属性值、所述标签类型为文本标签的文本内容、所述标签类型为注释标签的注释内容之后,所述方法还包括:
判断所述内容属性值中的名称属性值是否属于所述Root节点;
当所述内容属性值中的名称属性值不属于所述Root节点,则确定所述内容属性值为所述内容起始标签的读取结果;
当所述内容属性值中的名称属性值属于所述Root节点,则所述内容起始标签对应的内容无需读取。
7.根据权利要求5所述的XML文件读取方法,其特征在于,所述利用预设的解码器对所述内容元素进行遍历,得到内容标签,包括:
利用预设的第一令牌函数逐一识别所述内容元素的标记符号,当所述标记符号为结束标识符,则得到所述内容元素对应的所有内容标签,其中,所述解码器中包括所述第一令牌函数。
8.一种XML文件读取装置,其特征在于,包括:
获取模块,用于获取待读取的XML文件,利用预定义的类函数定义所述XML文件的Root节点;
定义模块,用于利用预定义的元素函数获取所述Root节点之后的内容元素,并利用预定义的栈变量定义所述内容元素中的父子元素关系;
遍历模块,用于利用预设的解码器对所述内容元素进行遍历,得到内容标签;
识别模块,用于利用预设的类型语句识别所述内容标签对应的标签类型,并根据所述父子元素关系判断所述标签类型是否为结束标签;及
读取模块,用于当所述标签类型不为结束标签,获取所述标签类型在所述XML文件中的标签顺序,根据所述标签顺序依次读取所述标签类型中的内容,得到所述XML文件的读取结果;当所述标签类型为结束标签,则停止所述XML文件的读取。
9.一种计算机设备,包括存储器和处理器,所述存储器中存储有计算机程序,所述处理器执行所述计算机程序时实现如权利要求1至7中任一项所述的XML文件读取方法的步骤。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如权利要求1至7中任一项所述的XML文件读取方法的步骤。
CN202310672194.9A 2023-06-07 2023-06-07 Xml文件读取方法、装置、设备及存储介质 Pending CN116644213A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202310672194.9A CN116644213A (zh) 2023-06-07 2023-06-07 Xml文件读取方法、装置、设备及存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202310672194.9A CN116644213A (zh) 2023-06-07 2023-06-07 Xml文件读取方法、装置、设备及存储介质

Publications (1)

Publication Number Publication Date
CN116644213A true CN116644213A (zh) 2023-08-25

Family

ID=87643277

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202310672194.9A Pending CN116644213A (zh) 2023-06-07 2023-06-07 Xml文件读取方法、装置、设备及存储介质

Country Status (1)

Country Link
CN (1) CN116644213A (zh)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116882366A (zh) * 2023-09-07 2023-10-13 粤芯半导体技术股份有限公司 标记型报文的结构转换方法、装置、电子产品和介质
CN117391066A (zh) * 2023-09-06 2024-01-12 苏州数设科技有限公司 面向工业数据的解析方法、装置、电子设备及存储介质

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117391066A (zh) * 2023-09-06 2024-01-12 苏州数设科技有限公司 面向工业数据的解析方法、装置、电子设备及存储介质
CN116882366A (zh) * 2023-09-07 2023-10-13 粤芯半导体技术股份有限公司 标记型报文的结构转换方法、装置、电子产品和介质
CN116882366B (zh) * 2023-09-07 2024-01-19 粤芯半导体技术股份有限公司 标记型报文的结构转换方法、装置、电子产品和介质

Similar Documents

Publication Publication Date Title
CN116644213A (zh) Xml文件读取方法、装置、设备及存储介质
CN113536185B (zh) 应用页面的加载方法、存储介质、及其相关设备
CN110851136A (zh) 数据获取方法、装置、电子设备及存储介质
CN111552463A (zh) 一种页面跳转方法、装置、计算机设备及存储介质
CN112860662B (zh) 自动化生产数据血缘关系建立方法、装置、计算机设备及存储介质
CN110688315A (zh) 接口代码检测报告生成方法、电子装置及存储介质
CN113010542B (zh) 业务数据处理方法、装置、计算机设备及存储介质
CN117033249A (zh) 一种测试用例生成方法、装置、计算机设备及存储介质
CN112925968A (zh) 基于爬虫的数据抓取方法、装置、计算机设备及存储介质
CN117111909A (zh) 代码自动化生成方法、系统、计算机设备及存储介质
CN111444235A (zh) 基于Django的数据序列化方法、装置、计算机设备及存储介质
CN116450723A (zh) 数据提取方法、装置、计算机设备及存储介质
CN114968725A (zh) 任务依赖关系校正方法、装置、计算机设备及存储介质
CN113312568B (zh) 一种基于HTML源代码和网页快照的Web信息抽取方法与系统
CN114912003A (zh) 文档搜索方法、装置、计算机设备及存储介质
CN114281817A (zh) 一种数据清洗方法、装置、计算机设备及存储介质
CN113239670A (zh) 一种业务模板上传的方法、装置、计算机设备及存储介质
CN112328246A (zh) 页面组件生成方法、装置、计算机设备及存储介质
CN116108814B (zh) 甘特图处理方法、装置、计算机设备及存储介质
CN116028108B (zh) 一种依赖包安装用时分析方法、装置、设备及存储介质
CN117785181A (zh) 一种代码执行方法、装置、设备及其存储介质
CN109144500B (zh) 一种基于图形化编程的皮肤文件处理方法及电子设备
CN113743367A (zh) 表单应用方法、装置、计算机设备及存储介质
CN117421233A (zh) 基于注解的代码生成方法、装置、计算机设备及存储介质
CN115526195A (zh) 图形码扫描方法、装置、计算机设备及存储介质

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination