CN113761283B - 一种读取xml文件的方法及装置、设备、存储介质 - Google Patents
一种读取xml文件的方法及装置、设备、存储介质 Download PDFInfo
- Publication number
- CN113761283B CN113761283B CN202010486821.6A CN202010486821A CN113761283B CN 113761283 B CN113761283 B CN 113761283B CN 202010486821 A CN202010486821 A CN 202010486821A CN 113761283 B CN113761283 B CN 113761283B
- Authority
- CN
- China
- Prior art keywords
- xml
- fields
- datax
- reading
- sequence
- 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.)
- Active
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/80—Information 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/84—Mapping; Conversion
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/80—Information 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/81—Indexing, e.g. XML tags; Data structures therefor; Storage structures
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4843—Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
-
- Y—GENERAL 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
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE 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/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Abstract
本申请公开了一种读取XML文件的方法及装置、设备、存储介质,其中,所述方法包括:获取包括有M条XML记录的XML文件,M为大于等于1的整数;按照所述M条XML记录的先后顺序,利用N个Xpath依次对每一所述XML记录中的字段进行读取,对应得到N个字段,N为大于等于1的整数;按照所述M条XML记录的先后顺序,确定从每一所述XML记录读取的N个字段对应的行字符串,将每一所述行字符串转化为满足DataX协议的字符串,以供DataX的写线程处理。本申请提供的技术方案一方面利用Xpath读取XML字段可以处理复杂的XML数据;另一方面一条一条地顺序读取字符串,可以将读取的字符串转化为满足DataX协议的字符串,以供DataX的写线程处理。
Description
技术领域
本申请涉及数据库技术,涉及但不限于一种读取XML文件的方法及装置、设备、存储介质。
背景技术
DataX是一个异构数据源离线同步工具,实现了包括关系型数据库、Hadoop分布式文件系统(Hadoop File System,HDFS)、Hive、开放数据处理服务(Open Data ProcessingService,ODPS)、HBase、文件传输协议(File Transfer Protocol,FTP)等各种异构数据源之间稳定高效的数据同步功能。其中,Hive是一个构建在Hadoop上的数据仓库框架,是一个通用的、可伸缩的数据处理平台;HBase是一个分布式的、面向列的开源数据库。
目前DataX支持抽取FTP和HDFS,但存在以下问题:第一、目前仅支持读取文本文件(TXT);第二、TXT文件中的概要为一张二维表,由于二维表不支持保存可扩展标记语言(Extensible Markup Language,XML)等非结构型数据,从而无法直接将DataX支持读取TXT文件的方式应用于对于XML文件的读取,其中,XML是标准通用标记语言的子集,是一种用于标记电子文件使其具有结构性的标记语言。
发明内容
有鉴于此,本申请为解决现有技术中存在的至少一个问题而提供一种读取XML文件的方法及装置、设备、存储介质。
本申请实施例的技术方案是这样实现的:
第一方面,本申请提供一种读取XML文件的方法,所述方法包括:
获取包括有M条XML记录的XML文件,M为大于等于1的整数;按照所述M条XML记录的先后顺序,利用N个Xpath依次对每一所述XML记录中的字段进行读取,对应得到N个字段,N为大于等于1的整数;按照所述M条XML记录的先后顺序,确定从每一所述XML记录读取的N个字段对应的行字符串,将每一所述行字符串转化为满足DataX协议的字符串,以供DataX的写线程处理。
第二方面,本申请提供一种读取XML文件的装置,所述装置包括:
获取模块,用于获取包括有M条XML记录的XML文件,M为大于等于1的整数;读取模块,用于按照所述M条XML记录的先后顺序,利用N个Xpath依次对每一所述XML记录中的字段进行读取,对应得到N个字段,N为大于等于1的整数;确定模块,用于按照所述M条XML记录的先后顺序,确定从每一所述XML记录读取的N个字段对应的行字符串,将每一所述行字符串转化为满足DataX协议的字符串,以供DataX的写线程处理。
第三方面,本申请提供一种读取XML文件的设备,包括存储器和处理器,所述存储器存储有可在处理器上运行的计算机程序,所述处理器执行所述程序时实现上述读取XML文件的方法的步骤。
第四方面,本申请提供一种计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现上述读取XML文件的方法的步骤。
本申请中首先获取需要读取的XML文件,然后按照M条XML记录的先后顺序,利用N个Xpath依次对每一所述XML记录中的字段进行读取,得到N个字段,最后顺序将从每一XML记录读取的N个字段转化为对应的满足DataX协议的字符串,以供DataX的写线程处理。这样,本申请提供的技术方案,一方面利用Xpath读取XML字段可以处理复杂的XML数据;另一方面一条一条地顺序读取字符串,可以将读取的字符串转化为满足DataX协议的字符串,以供DataX的写线程处理。
在一些实施例中,首先描述了如何根据XML文件的读取需求,将N个循环路径和与N个循环路径一一对应的N个抽取字段组装得到N个Xpath。然后描述了可以使用SAX元素处理解析器对文档进行顺序扫描,在扫描过程中按照所述M条XML记录的先后顺序,利用N个Xpath依次对每一所述XML记录中的字段进行读取,对应得到N个字段。这样,一方面使用SAX元素处理解析器在扫描的过程中,按照所述M条XML记录的先后顺序,利用N个Xpath依次对每一所述XML记录中的字段进行读取,方便后续一条一条处理读取出的字段,以供DataX的写线程处理;另一方面利用Xpath读取XML可以方便抽取元素节点和属性节点。
在一些实施例中,描述了首先用分隔符将字段转化成对应的行字符串,再将每一所述行字符串序列化成字节序列字符串,最后将每一所述字节序列字符串转化为满足DataX协议的字符串,以供DataX的写线程处理。这样可以使用分隔符、序列化的方法实现将字段转化为满足DataX协议的字符串,以供DataX的写线程处理。
在一些实施例中,描述了使用阻塞队列处理数据。这样,将解析的来自于XML文件的记录存入用于DataX读线程消费的阻塞队列中去,从而实现了DataX不需要一次性将XML文件load到内存的情况下能够读取XML文件上的一条记录,避免将大文本一次性装载到内存中去从而降低了DataX的内存压力。
在一些实施例中,描述了使用阻塞队列处理数据。这样,将解析的来自于XML文件的记录存入用于DataX读线程消费的阻塞队列中去,从而实现了DataX不需要一次性将XML文件load到内存的情况下能够读取XML文件上的一条记录,避免将大文本一次性装载到内存中去从而降低了DataX的内存压力。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它的附图,其中:
图1为本申请实施例提供的一种读取XML文件的方法的实现流程示意图;
图2为本申请实施例提供的另一种读取XML文件的方法的实现流程示意图;
图3A为本申请实施例提供的再一种读取XML文件的方法的实现流程示意图;
图3B为本申请实施例提供的又一种读取XML文件的方法的实现流程示意图;
图4为本申请实施例提供的又一种读取XML文件的方法的实现流程示意图;
图5为本申请实施例提供的一种读取XML文件的装置的组成结构示意图;
图6为本申请实施例提供的一种读取XML文件的设备的硬件实体示意图。
具体实施方式
本申请实施例提供一种读取XML文件的方法,图1为本申请实施例提供的一种读取XML文件的方法的实现流程示意图,如图1所示,所述方法包括:
步骤S101、获取包括有M条XML记录的XML文件,M为大于等于1的整数;
一个XML文件包括有M条XML记录。要读取XML文件,首先要获取一个XML文件。
步骤S102、按照所述M条XML记录的先后顺序,利用N个Xpath依次对每一所述XML记录中的字段进行读取,对应得到N个字段,N为大于等于1的整数;
路径语言(XML Path Language,XPath),是一种用来确定XML文档中某部分位置的语言。XPath用于在XML文档中通过元素和属性进行导航。N个Xpath表示每一条XML记录中需要读取出N个元素或属性。按照M条XML记录的先后顺序,是指读取时需要对文档进行顺序扫描利用N个Xpath依次对每一所述XML记录中的字段进行读取,每一条XML记录可以对应得到N个字段。
步骤S103、按照所述M条XML记录的先后顺序,确定从每一所述XML记录读取的N个字段对应的行字符串,将每一所述行字符串转化为满足DataX协议的字符串,以供DataX的写线程处理。
读取M条XML记录是按照先后顺序,之后每读取出一条XML记录就确定这XML记录读取的N个字段对应的行字符串。得到行字符串后,将每一行字符串转化为满足DataX协议的字符串,提供给DataX的写线程来消费写入目的数据源。
本申请实施例中首先获取需要读取的XML文件,然后按照M条XML记录的先后顺序,利用N个Xpath依次对每一所述XML记录中的字段进行读取,得到N个字段,最后顺序将从每一XML记录读取的N个字段转化为对应的满足DataX协议的字符串,以供DataX的写线程处理。这样,本申请实施例提供的技术方案,一方面利用Xpath读取XML字段可以处理复杂的XML数据;另一方面一条一条地顺序读取字符串,可以将读取的字符串转化为满足DataX协议的字符串,以供DataX的写线程处理。
本申请实施例提供一种读取XML文件的方法,图2为本申请实施例提供的另一种读取XML文件的方法的实现流程示意图,如图2所示,所述方法包括:
步骤S201、获取包括有M条XML记录的XML文件,M为大于等于1的整数;
步骤S202、根据所述XML文件的读取需求,确定N个循环路径和与所述N个循环路径一一对应的N个抽取字段;
循环路径指XML文件中从根节点到循环数据起始节点的全路径,循环路径使用“/”符号进行分隔,其中第一个“/”后的字符串默认为根节点。例如:/ROOT/LEAF/ITEM。抽取字段(Field)根据需求可以设置成属性(@id)或元素(ADVICEGROUPID)。每一个循环路径对应需要一个抽取字段。根据所述XML文件的读取需求,确定N个循环路径和与所述N个循环路径一一对应的N个抽取字段。
步骤S203、根据每一所述N个循环路径和对应的N个抽取字段组装成一个Xpath,得到所述N个Xpath;
每一循环路径和对应的抽取字段组装成一个Xpath。例如循环路径为/ROOT/LEAF/ITEM,抽取字段为属性(@id)或元素(ADVICEGROUPID),那么依据LoopPath和Field组装得到的Xpath具体为以下两种情况:
1)当抽取字段为属性时,组装得到的Xpath为:
/ROOT/LEAF/ITEM/@id,表示对/ROOT/LEAF/ITEM这一循环路径对应的XML文件中的节点的@id进行抽取;
2)当抽取字段为元素时,组装得到的Xpath为:
/ROOT/LEAF/ITEM/ADVICEGROUPID,表示对/ROOT/LEAF/ITEM这一循环路径对应的XML文件中的节点的ADVICEGROUPID进行抽取。
N个循环路径和对应的N个抽取字段组装成N个Xpath。
步骤S204、在使用流扫描方式扫描所述M条XML记录时,按照所述M条XML记录的先后顺序,利用N个Xpath依次对每一所述XML记录中的字段进行读取,对应得到N个字段;
流扫描可以使用XML简单应用程序接口(simple API for XML,SAX)元素处理解析器(ElementHandler),其工作原理简单地说就是对文档进行顺序扫描,当扫描到文档开始与结束、元素开始与结束、文档结束等地方时通知事件处理函数,由事件处理函数做相应动作,然后继续同样的扫描,直至文档结束。这种扫描方式,称为按照流的扫描方式。这时的事件处理函数指的就是使用Xpath对每一XML记录中的字段进行读取。可以使用ElementHandler扫描所述M条XML记录,在扫描的过程中按照所述M条XML记录的先后顺序,利用N个Xpath依次对每一所述XML记录中的字段进行读取,对应得到N个字段。
步骤S205、按照所述M条XML记录的先后顺序,确定从每一所述XML记录读取的N个字段对应的行字符串,将每一所述行字符串转化为满足DataX协议的字符串,以供DataX的写线程处理。
本申请实施例首先描述了如何根据XML文件的读取需求,将N个循环路径和与N个循环路径一一对应的N个抽取字段组装得到N个Xpath。然后描述了可以使用SAX元素处理解析器对文档进行顺序扫描,在扫描过程中按照所述M条XML记录的先后顺序,利用N个Xpath依次对每一所述XML记录中的字段进行读取,对应得到N个字段。这样,一方面使用SAX元素处理解析器在扫描的过程中,按照所述M条XML记录的先后顺序,利用N个Xpath依次对每一所述XML记录中的字段进行读取,方便后续一条一条处理读取出的字段,以供DataX的写线程处理;另一方面利用Xpath读取XML可以方便抽取元素节点和属性节点。
本申请实施例提供一种读取XML文件的方法,图3A为本申请实施例提供的再一种读取XML文件的方法的实现流程示意图,如图3A所示,所述方法包括:
步骤S301、获取包括有M条XML记录的XML文件,M为大于等于1的整数;
步骤S302、按照所述M条XML记录的先后顺序,利用N个Xpath依次对每一所述XML记录中的字段进行读取,对应得到N个字段,N为大于等于1的整数;
步骤S303、按照所述M条XML记录的先后顺序,确定从每一所述XML记录读取的N个字段;
步骤S304、将每一所述N个字段用分隔符转化成对应的行字符串;
将读取出的N个字段用配置的分隔符转化成String类型的行字符串(lineString),该行字符串就是一条XML记录。
步骤S305、将每一所述行字符串序列化成字节序列字符串;
可以通过写函数实现将字节序列字符串转化为满足DataX协议的字符串。
步骤S306、将每一所述字节序列字符串转化为满足DataX协议的字符串,以供DataX的写线程处理。
本申请实施例主要描述了首先用分隔符将字段转化成对应的行字符串,再将每一所述行字符串序列化成字节序列字符串,最后将每一所述字节序列字符串转化为满足DataX协议的字符串,以供DataX的写线程处理。这样可以使用分隔符、序列化的方法实现将字段转化为满足DataX协议的字符串,以供DataX的写线程处理。
本申请实施例提供一种读取XML文件的方法,图3B为本申请实施例提供的又一种读取XML文件的方法实现的流程示意图,如图3B所示,所述方法包括:
步骤S311、获取包括有M条XML记录的XML文件,M为大于等于1的整数;
步骤S312、按照所述M条XML记录的先后顺序,利用N个Xpath依次对每一所述XML记录中的字段进行读取,对应得到N个字段,N为大于等于1的整数;
步骤S313、按照所述M条XML记录的先后顺序,确定从每一所述XML记录读取的N个字段对应的行字符串;
步骤S314、按照获取所述行字符串的先后顺序,将所述M个行字符串依次存入第一阻塞队列中,其中所述第一阻塞队列是指支持阻塞操作的队列;
阻塞队列,是指支持阻塞操作的队列,支持阻塞添加。阻塞添加是指当队列满的时候,阻塞插入的元素的线程,直到队列不满允许元素添加。阻塞队列遵守先进先出(FirstInput First Output,FIFO)规则。当阻塞队列不满时,按照获取所述行字符串的先后顺序,将M个行字符串依次存入第一阻塞队列中。将转换得到的这条XML记录放入阻塞队列,是由于后续在将读取到的记录转化成DataX协议时,DataX需要分别读取各条记录并进行转换。若不将转换得到的该条XML记录放入阻塞队列,则可能会发生转换得到的所有XML记录一次性全部放入内存等待转换的情况。对于这种情况,DataX无法正常实现将记录转换为DataX协议。
步骤S315、确定所述第一阻塞队列非空时,从所述第一阻塞队列依次提取每一所述行字符串,将每一所述行字符串序列化成字节序列字符串;
确定所述第一阻塞队列非空时即第一阻塞队列中有需要处理的字符串,这时遵守FIFO,从第一阻塞队列依次提取每一所述行字符串。取出的行字符串需要序列化成字节序列字符串。
步骤S316、将每一所述字节序列字符串转化为满足DataX协议的字符串;
步骤S317、将所述满足DataX协议的字符串存入第二阻塞队列中,以供DataX的写线程从所述第二阻塞队列中依次提取每一所述满足DataX协议的字符串进行处理。
将所述满足DataX协议的字符串存入第二阻塞队列中是为了DataX的写线程从所述第二阻塞队列中一条一条地提取出每一所述满足DataX协议的字符串进行处理。
本申请实施例主要描述了使用阻塞队列处理数据。这样,将解析的来自于XML文件的记录存入用于DataX读线程消费的阻塞队列中去,从而实现了DataX不需要一次性将XML文件load到内存的情况下能够读取XML文件上的一条记录,避免将大文本一次性装载到内存中去从而降低了DataX的内存压力。
相关技术中的DataX已经实现了从本地文件读取数据并转为DataX协议的功能。DataX中的读插件实现了从数据存储系统批量抽取数据,并转换为DataX标准数据交换协议;写插件实现了从DataX标准数据交换协议,翻译为具体的数据存储类型并写入目的数据存储。DataX的任意读插件能与DataX的任意写插件实现无缝对接,达到任意异构数据互通之目的。
按照相关技术,虽然DataX实现了从本地文件读取数据并转为DataX协议的功能,但目前支持且仅支持读取TXT的文件,且要求TXT中概要(schema)为一张二维表。其中,TXT是微软在操作系统上附带的一种文本格式,是最常见的一种文件格式,主要存文本信息,即为文字信息。
本申请实施例提出为DataX的读线程提供一个满足DataX每次读取文件传输协议(File Transfer Protocol,FTP)、安全文件传送协议(Secure File Transfer Protocol,SFTP)或者Hadoop分布式文件系统(Hadoop File System,HDFS)上的XML文件上的一条记录,并转化为DataX协议的方法,弥补DataX对于XML抽取的能力的缺失。基于SAXReader实现对XML文件的解析,利用事件流的方式,避免将整个XML文件一次性Load到内存中去,从而降低内存的压力。其中SAXReader用于解析XML文件,是一种XML文件解析方案。
本申请实施例提供一种读取XML文件的方法,图4为本申请实施例提供的又一种读取XML文件的方法实现流程示意图,如图4所示,所述方法包括:
步骤S401、在DataX中设置DataXXMLReader插件,用于设置待读取XML文件的N个循环路径和N个抽取字段,其中N为大于等于1的整数;
循环路径(LoopPath)是XML文件中从根节点到循环数据起始节点的全路径。循环路径使用“/”符号进行分隔,其中第一个“/”后的字符串默认为根节点。例如:/ROOT/LEAF/ITEM。抽取字段(Field)根据需求可以设置成属性(@id)或元素(ADVICEGROUPID)。
步骤S402、DataXXMLReader根据接收到的N个循环路径和N个抽取字段组装成N个Xpath;
XPath是在XML文件中查找信息的语言,用于在XML文件中通过元素和属性进行导航。例如循环路径为/ROOT/LEAF/ITEM,抽取字段为属性(@id)或元素(ADVICEGROUPID),那么依据LoopPath和Field组装得到的Xpath具体为以下两种情况:
1)当抽取字段为属性时,组装得到的Xpath为:
/ROOT/LEAF/ITEM/@id,表示对/ROOT/LEAF/ITEM这一循环路径对应的XML文件中的节点的@id进行抽取;
2)当抽取字段为元素时,组装得到的Xpath为:
/ROOT/LEAF/ITEM/ADVICEGROUPID,表示对/ROOT/LEAF/ITEM这一循环路径对应的XML文件中的节点的ADVICEGROUPID进行抽取。
步骤S403、DataXXMLReader在使用SAX元素处理解析器扫描有M条XML记录的文件时,利用N个Xpath读取要抽取的字段,得到抽取M个字段集合,M为大于等于1的整数,其中每一字段集合中包括N个字段;
SAX元素处理解析器(ElementHandler),工作原理是对文档进行顺序扫描,当扫描到文档开始与结束、元素开始与结束、文档结束等地方时通知事件处理函数,由事件处理函数做相应动作,然后继续同样的扫描,直至文档结束。这种扫描方式,称为按照流的扫描方式。这里的事件处理函数就是Xpath,即在使用SAX元素处理解析器扫描XML文档时,当扫描到文档开始与结束、元素开始与结束、文档结束等地方时利用N个Xpath读取要抽取的字段,对M条XML记录扫描M次,得到M个字段集合,其中每一字段集合中包括N个字段。
步骤S404、DataXXMLReader将获得的M个字段集合中每一字段集合用配置的分隔符转化成M个行字符串,得到每一字段集合对应的一个字符串;
M个字段集合中每一字段集合即一条XML记录,DataXXMLReader将一条XML记录用配置的分隔符转化成行字符串(lineString)。
步骤S405、DataXXMLReader将转换得到的M个行字符串逐一放入阻塞队列A;
阻塞队列,是指支持阻塞操作的队列,支持阻塞添加。阻塞添加是指当队列满的时候,阻塞插入的元素的线程,直到队列不满允许添加。
转换得到的M条XML记录逐一放入阻塞队列,是由于在将读取到的记录转化成DataX协议时,DataX需要分别读取各条记录并进行转换。若不将转换得到的M条XML记录逐一放入阻塞队列A,则会发生转换得到的所有XML记录一次性全部放入内存等待转换的情况。对于这种情况,DataX无法正常实现将记录转换为DataX协议。
将XML记录逐一放入阻塞队列A,可以使得后续从该队列A中读取数据时,可以是一条条地进行读取,从而相当于为DataX的读线程制造出了一种从txt文件中读取数据的效果,实现了与DataX需求的适配。
步骤S406、当阻塞队列A中存在行字符串时,DataXXMLReader取出一个行字符串序列化成字节序列字符串;
DataX的读线程会一直查询XML文件是否扫描结束以及阻塞队列A是否为空,若扫描结束且阻塞队列为空则结束流程,否则从阻塞队列A中获取解析的XML记录并消费。当阻塞队列A中存在行字符串时,取出一个行字符串序列化(Serde)成字节序列字符串。
步骤S407、DataXXMLReader将字节序列字符串转化为满足DataX协议的字符串并写入阻塞队列B等待被DataX的写线程消费。
将新字符串转化为DataX协议并写入阻塞队列B供DataX的写线程来消费写入目的数据源。
本申请实施例为DataX添加了一个用于读线程消费的阻塞队列,再利用SAXReader的事件流将解析的来自于XML文件的记录存入用于DataX读线程消费的阻塞队列中去,从而实现了DataX每次在不需要一次性将XML文件load到内存的情况下能够读取XML文件上的一条记录,并将该记录转化为DataX协议。利用Xpath抽取XML可以方便抽取元素节点、属性节点、元素节点,也可以处理复杂的XML数据。
基于前述的实施例,本申请实施例提供一种读取XML文件的装置,该装置包括所包括的各模块、以及各模块所包括的各单元,可以通过读取XML文件的设备中的处理器来实现;当然也可通过具体的逻辑电路实现;在实施的过程中,处理器可以为中央处理器(CPU)、微处理器(MPU)、数字信号处理器(DSP)或现场可编程门阵列(FPGA)等。
图5为本申请实施例提供的一种读取XML文件的装置的组成结构示意图,如图5所示,所述装置500包括:获取模块501、读取模块502和确定模块503,其中:
所述获取模块501,用于按照所述M条XML记录的先后顺序,利用N个Xpath依次对每一所述XML记录中的字段进行获取,对应得到N个字段,N为大于等于1的整数;
所述读取模块502,用于按照所述M条XML记录的先后顺序,利用N个Xpath依次对每一所述XML记录中的字段进行读取,对应得到N个字段,N为大于等于1的整数;
所述确定模块503,用于按照所述M条XML记录的先后顺序,确定从每一所述XML记录读取的N个字段对应的行字符串,将每一所述行字符串转化为满足DataX协议的字符串,以供DataX的写线程处理。
在一些实施例中,所述读取模块还包括组装单元和读取单元,其中所述组装单元,用于根据所述XML文件的读取需求,组装N个Xpath;所述读取单元,用于在使用流扫描方式扫描所述M条XML记录时,按照所述M条XML记录的先后顺序,利用N个Xpath依次对每一所述XML记录中的字段进行读取,对应得到N个字段。
在一些实施例中,所述组装单元还包括确定子单元和组装子单元,其中所述确定子单元,用于根据所述XML文件的读取需求,确定N个循环路径和与所述N个循环路径一一对应的N个抽取字段;所述组装子单元,用于根据每一所述N个循环路径和对应的N个抽取字段组装成一个Xpath,得到所述N个Xpath。
在一些实施例中,所述确定模块还包括确定单元、第一转化单元、存入单元、提取单元、序列化单元和第二转化单元,其中所述确定单元,用于按照所述M条XML记录的先后顺序,确定从每一所述XML记录读取的N个字段;所述第一转化单元,用于将每一所述N个字段用分隔符转化成对应的行字符串;存入单元,用于按照获取所述行字符串的先后顺序,将所述M个行字符串依次存入第一阻塞队列中,其中所述第一阻塞队列是指支持阻塞操作的队列;所述提取单元,用于确定所述第一阻塞队列非空时,从所述第一阻塞队列依次提取每一所述行字符串;所述序列化单元用于将每一所述行字符串序列化成字节序列字符串;所述第二转化单元用于将每一所述字节序列字符串转化为满足DataX协议的字符串,以供DataX的写线程处理。
在一些实施例中,所述第二转化单元还包括转化子单元和存入子单元,其中所述转化子单元,用于将每一所述字节序列字符串转化为满足DataX协议的字符串;所述存入子单元,用于将所述满足DataX协议的字符串存入第二阻塞队列中,以供DataX的写线程从所述第二阻塞队列中依次提取每一所述满足DataX协议的字符串进行处理。
这里需要指出的是:以上装置实施例的描述,与上述方法实施例的描述是类似的,具有同方法实施例相似的有益效果。对于本申请装置实施例中未披露的技术细节,请参照本申请方法实施例的描述而理解。
需要说明的是,本申请实施例中,如果以软件功能模块的形式实现上述的读取XML文件的方法,并作为独立的产品销售或使用时,也可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请实施例的技术方案本质上或者说对相关技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得包含该存储介质的设备自动测试线执行本申请各个实施例所述方法的全部或部分。而前述的存储介质包括:U盘、移动硬盘、只读存储器(Read Only Memory,ROM)、磁碟或者光盘等各种可以存储程序代码的介质。
对应地,本申请实施例提供一种读取XML文件的设备,例如计算机设备和服务器,图6为本申请实施例提供的一种读取XML文件的设备的硬件实体示意图,如图6所示,该读取XML文件的设备600的硬件实体包括:包括存储器601和处理器602,所述存储器601存储有可在处理器602上运行的计算机程序,所述处理器602执行所述程序时实现上述实施例中提供的软件加密方法中的步骤。
存储器601配置为存储由处理器602可执行的指令和应用,还可以缓存待处理器602以及读取XML文件的设备600中各模块待处理或已经处理的数据,可以通过闪存(FLASH)或随机访问存储器(Random Access Memory,RAM)实现。
这里需要指出的是:以上存储介质和设备实施例的描述,与上述方法实施例的描述是类似的,具有同方法实施例相似的有益效果。对于本申请存储介质和设备实施例中未披露的技术细节,请参照本申请方法实施例的描述而理解。
应理解,说明书通篇中提到的“一个实施例”或“一实施例”意味着与实施例有关的特定特征、结构或特性包括在本申请的至少一个实施例中。因此,在整个说明书各处出现的“在一个实施例中”或“在一实施例中”未必一定指相同的实施例。此外,这些特定的特征、结构或特性可以任意适合的方式结合在一个或多个实施例中。应理解,在本申请的各种实施例中,上述各过程的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本申请实施例的实施过程构成任何限定。上述本申请实施例序号仅仅为了描述,不代表实施例的优劣。
需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者装置不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者装置所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、方法、物品或者装置中还存在另外的相同要素。
在本申请所提供的几个实施例中,应该理解到,所揭露的设备和方法,可以通过其它的方式实现。以上所描述的设备实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,如:多个单元或组件可以结合,或可以集成到另一个系统,或一些特征可以忽略,或不执行。另外,所显示或讨论的各组成部分相互之间的耦合、或直接耦合、或通信连接可以是通过一些接口,设备或单元的间接耦合或通信连接,可以是电性的、机械的或其它形式的。
上述作为分离部件说明的单元可以是、或也可以不是物理上分开的,作为单元显示的部件可以是、或也可以不是物理单元;既可以位于一个地方,也可以分布到多个网络单元上;可以根据实际的需要选择其中的部分或全部单元来实现本实施例方案的目的。
另外,在本申请各实施例中的各功能单元可以全部集成在一个处理单元中,也可以是各单元分别单独作为一个单元,也可以两个或两个以上单元集成在一个单元中;上述集成的单元既可以采用硬件的形式实现,也可以采用硬件加软件功能单元的形式实现。
本领域普通技术人员可以理解:实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述的程序可以存储于计算机可读取存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括:移动存储设备、只读存储器(Read Only Memory,ROM)、磁碟或者光盘等各种可以存储程序代码的介质。
或者,本申请上述集成的单元如果以软件功能模块的形式实现并作为独立的产品销售或使用时,也可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请实施例的技术方案本质上或者说对相关技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得计算机设备(可以是手机、平板电脑、笔记本电脑、台式计算机)和服务器执行本申请各个实施例所述方法的全部或部分。而前述的存储介质包括:移动存储设备、ROM、磁碟或者光盘等各种可以存储程序代码的介质。
本申请所提供的几个方法实施例中所揭露的方法,在不冲突的情况下可以任意组合,得到新的方法实施例。
本申请所提供的几个产品实施例中所揭露的特征,在不冲突的情况下可以任意组合,得到新的产品实施例。
本申请所提供的几个方法或设备实施例中所揭露的特征,在不冲突的情况下可以任意组合,得到新的方法实施例或设备实施例。
以上所述,仅为本申请的实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应以所述权利要求的保护范围为准。
Claims (9)
1.一种读取XML文件的方法,其特征在于,所述方法包括:
获取包括有M条XML记录的XML文件,M为大于等于1的整数;
按照所述M条XML记录的先后顺序,利用N个Xpath依次对每一所述XML记录中的字段进行读取,对应得到N个字段,N为大于等于1的整数;
按照所述M条XML记录的先后顺序,确定从每一所述XML记录读取的N个字段对应的行字符串,将每一所述行字符串序列化成字节序列字符串,将每一所述字节序列字符串转化为满足DataX协议的字符串,以供DataX的写线程处理。
2.根据权利要求1所述的方法,其特征在于,所述按照所述M条XML记录的先后顺序,利用N个Xpath依次对每一所述XML记录中的字段进行读取,对应得到N个字段,包括:
根据所述XML文件的读取需求,组装N个Xpath;
在使用流扫描方式扫描所述M条XML记录时,按照所述M条XML记录的先后顺序,利用N个Xpath依次对每一所述XML记录中的字段进行读取,对应得到N个字段。
3.根据权利要求2所述的方法,其特征在于,所述根据所述XML文件的读取需求,组装N个Xpath,包括:
根据所述XML文件的读取需求,确定N个循环路径和与所述N个循环路径一一对应的N个抽取字段;
根据每一所述N个循环路径和对应的N个抽取字段组装成一个Xpath,得到所述N个Xpath。
4.根据权利要求1所述的方法,其特征在于,所述按照所述M条XML记录的先后顺序,确定从每一所述XML记录读取的N个字段对应的行字符串,包括:
按照所述M条XML记录的先后顺序,确定从每一所述XML记录读取的N个字段;
将每一所述N个字段用分隔符转化成对应的行字符串。
5.根据权利要求1所述的方法,其特征在于,所述方法还包括:
按照获取所述行字符串的先后顺序,将M个行字符串依次存入第一阻塞队列中,其中所述第一阻塞队列是指支持阻塞操作的队列;
确定所述第一阻塞队列非空时,从所述第一阻塞队列依次提取每一所述行字符串,将每一所述行字符串序列化成字节序列字符串。
6.根据权利要求5所述的方法,其特征在于,所述将每一所述字节序列字符串转化为满足DataX协议的字符串,以供DataX的写线程处理,包括:
将每一所述字节序列字符串转化为满足DataX协议的字符串;
将所述满足DataX协议的字符串存入第二阻塞队列中,以供DataX的写线程从所述第二阻塞队列中依次提取每一所述满足DataX协议的字符串进行处理。
7.一种读取XML文件的装置,其特征在于,所述装置包括:
获取模块,用于获取包括有M条XML记录的XML文件,M为大于等于1的整数;
读取模块,用于按照所述M条XML记录的先后顺序,利用N个Xpath依次对每一所述XML记录中的字段进行读取,对应得到N个字段,N为大于等于1的整数;
确定模块,用于按照所述M条XML记录的先后顺序,确定从每一所述XML记录读取的N个字段对应的行字符串,将每一所述行字符串序列化成字节序列字符串,将每一所述字节序列字符串转化为满足DataX协议的字符串,以供DataX的写线程处理。
8.一种读取XML文件的设备,包括存储器和处理器,所述存储器存储有可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现权利要求1至6任一项所述读取XML文件的方法中的步骤。
9.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该计算机程序被处理器执行时实现权利要求1至6任一项所述读取XML文件的方法中的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010486821.6A CN113761283B (zh) | 2020-06-01 | 2020-06-01 | 一种读取xml文件的方法及装置、设备、存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010486821.6A CN113761283B (zh) | 2020-06-01 | 2020-06-01 | 一种读取xml文件的方法及装置、设备、存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113761283A CN113761283A (zh) | 2021-12-07 |
CN113761283B true CN113761283B (zh) | 2023-09-05 |
Family
ID=78782807
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010486821.6A Active CN113761283B (zh) | 2020-06-01 | 2020-06-01 | 一种读取xml文件的方法及装置、设备、存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113761283B (zh) |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105335412A (zh) * | 2014-07-31 | 2016-02-17 | 阿里巴巴集团控股有限公司 | 用于数据转换、数据迁移的方法和装置 |
CN106789898A (zh) * | 2016-11-18 | 2017-05-31 | 杭州塔网科技有限公司 | 远程数据传输终端、系统及其编码、解码方法 |
CN107341135A (zh) * | 2017-05-24 | 2017-11-10 | 中国科学院信息工程研究所 | 一种面向通用文本格式的解析方法及工具 |
WO2019148671A1 (zh) * | 2018-01-30 | 2019-08-08 | 平安科技(深圳)有限公司 | 一种xml文件解析方法、装置、计算机设备及存储介质 |
CN110569090A (zh) * | 2018-06-05 | 2019-12-13 | 中移(苏州)软件技术有限公司 | 一种数据处理方法、装置、电子设备及存储介质 |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8918710B2 (en) * | 2004-10-05 | 2014-12-23 | Oracle International Corporation | Reducing programming complexity in applications interfacing with parsers for data elements represented according to a markup language |
CN101196886B (zh) * | 2006-12-08 | 2011-01-05 | 鸿富锦精密工业(深圳)有限公司 | Word文件转换成XML文件的系统及方法 |
CA3027756C (en) * | 2016-06-28 | 2021-04-13 | Solano Labs, Inc. | Systems and methods for efficient distribution of stored data objects |
-
2020
- 2020-06-01 CN CN202010486821.6A patent/CN113761283B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105335412A (zh) * | 2014-07-31 | 2016-02-17 | 阿里巴巴集团控股有限公司 | 用于数据转换、数据迁移的方法和装置 |
CN106789898A (zh) * | 2016-11-18 | 2017-05-31 | 杭州塔网科技有限公司 | 远程数据传输终端、系统及其编码、解码方法 |
CN107341135A (zh) * | 2017-05-24 | 2017-11-10 | 中国科学院信息工程研究所 | 一种面向通用文本格式的解析方法及工具 |
WO2019148671A1 (zh) * | 2018-01-30 | 2019-08-08 | 平安科技(深圳)有限公司 | 一种xml文件解析方法、装置、计算机设备及存储介质 |
CN110569090A (zh) * | 2018-06-05 | 2019-12-13 | 中移(苏州)软件技术有限公司 | 一种数据处理方法、装置、电子设备及存储介质 |
Non-Patent Citations (1)
Title |
---|
DataX编译笔记;火玄子;CSDN;1-6 * |
Also Published As
Publication number | Publication date |
---|---|
CN113761283A (zh) | 2021-12-07 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
AU2005231112B2 (en) | Methods and systems for structuring event data in a database for location and retrieval | |
US7844642B2 (en) | Method and structure for storing data of an XML-document in a relational database | |
US6763499B1 (en) | Methods and apparatus for parsing extensible markup language (XML) data streams | |
CN105446946B (zh) | 版式文档的重排方法、系统及电子阅读终端 | |
US20130238968A1 (en) | Automatic Creation of a Table and Query Tools | |
US8868556B2 (en) | Method and device for tagging a document | |
US11222067B2 (en) | Multi-index method and apparatus, cloud system and computer-readable storage medium | |
US20140067823A1 (en) | Textual Search for Numerical Properties | |
CN111046135A (zh) | 非结构文本处理方法、装置、计算机设备、存储介质 | |
CN110147431A (zh) | 关键词匹配方法、装置、计算机设备和存储介质 | |
US20190108393A1 (en) | Method and apparatus for retrieving image-text block from web page | |
KR102087280B1 (ko) | 편집 명령을 포함하는 메시지에 기초하여 전자 문서를 편집하는 서버 및 그 동작 방법 | |
CN113761283B (zh) | 一种读取xml文件的方法及装置、设备、存储介质 | |
CN110795920A (zh) | 一种文档生成方法及设备 | |
CN116107772A (zh) | 多线程的数据处理方法、装置、处理器以及电子设备 | |
US8281235B1 (en) | Transformation of structured files | |
CN111401005B (zh) | 文本转换方法、装置及可读存储介质 | |
CN112800078A (zh) | 基于javascript的轻量级文本标注方法、系统、设备及存储介质 | |
CN111241788A (zh) | 基于线性模型的文档转换方法、装置、设备及存储介质 | |
US20110145700A1 (en) | Structured document analysis apparatus and structured document analysis method | |
CN111475679A (zh) | Html文档处理方法、页面显示方法和设备 | |
CN111913910B (zh) | 一种随访文件数据提取方法及系统 | |
CN117494698A (zh) | 一种低内存消耗的xml解析方法、系统及介质 | |
JP5503920B2 (ja) | 単語帳システム | |
JP2021149637A (ja) | ドメイン知識活用支援装置、プログラムおよびドメイン知識活用支援方法 |
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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |