发明内容
本发明所要解决的技术问题在于,提供一种新的XML文件解析方式,能够提高体积较大的XML文件的解析效率,并降低解析工作造成的硬件压力。
有鉴于此,本发明提供一种XML文件解析方法,包括:步骤102,读入XML文件;步骤104,过滤掉XML文件中的预定类型的数据;步骤106,对过滤掉预定类型的数据的XML文件进行解析。通过该技术方案,不影响XML结构的情况下,将不必要的数据去掉,减小了XML文件的体积,保证了解析的效率。预定类型的数据可以是存储在XML多个类型的节点(也称为元素)下的数据,其中,对于占用空间较大的大数据,该技术方案尤为适用。解析操作可以利用DOM、SAX、DOM4J、JDOM四种方式中任一种的接口来实现。
在上述技术方案中,优选地,步骤104包括:在XML文件中查找预定类型的数据对应的每个节点的开始标记和结束标记,过滤掉每个节点的开始标记和结束标记之间的数据。通过该技术方案,由于XML文件中存储的数据,一般指文本数据,均位于其树形结构的子节点之下,所以,通过查找子节点的开始标记和结束标记,可以方便地去除该子节点下的数据。
在上述技术方案中,优选地,步骤102具体为:分多个数据块读入XML文件;步骤104具体为:在读入每个数据块时,都对每个数据块中的预定类型的数据进行过滤。通过该技术方案,将XML分块读入,而不需整个读入,能够有效地缓解硬件如内存的压力。
在上述技术方案中,优选地,步骤104具体为:在多个数据块中,查找预定类型的数据对应的每个节点的开始标记,并在找到开始标记后查找每个节点的结束标记,其中,对于预定类型的数据对应的预定节点,在读入的数据块中存在预定节点的开始标记和结束标记的情况下,过滤掉数据块中预定节点的开始标记和结束标记之间的数据,在数据块中仅存在预定节点的开始标记的情况下,过滤掉数据块中的预定节点的开始标记之后的数据,在数据块中仅存在预定节点的结束标记的情况下,过滤掉数据块中的预定节点的结束标记之前的数据,在数据块中不存在预定类型的数据对应的任一节点的开始标记和结束标记的情况下,则在当前查找任一节点的结束标记时,过滤掉数据块中的所有数据。
在上述技术方案中,优选地,步骤102具体为:设置固定大小的缓存区域,通过缓存区域将XML文件分多个数据块读入。
本发明还提供一种XML文件解析装置,包括:读入模块,读入XML文件;过滤模块,过滤掉XML文件中的预定类型的数据;解析模块,对过滤掉预定类型的数据的XML文件进行解析。通过该技术方案,在不影响XML结构的情况下,将不必要的数据去掉,减小了XML文件的体积,保证了解析的效率。预定类型的数据可以是存储在XML多个类型的节点(也称为元素)下的数据,其中,对于占用空间较大的大数据,该技术方案尤为适用。解析操作可以利用DOM、SAX、DOM4J、JDOM四种方式中任一种的接口来实现。
在上述技术方案中,优选地,过滤模块在XML文件中查找预定类型的数据对应的每个节点的开始标记和结束标记,过滤掉每个节点的开始标记和结束标记之间的数据。通过该技术方案,由于XML文件中存储的数据,一般指文本数据,均位于其树形结构的子节点之下,所以,通过查找子节点的开始标记和结束标记,可以方便地去除该子节点下的数据。
在上述技术方案中,优选地,读入模块分多个数据块读入XML文件;在读入模块读入每个数据块时,过滤模块都对每个数据块中的预定类型的数据进行过滤。通过该技术方案,将XML分块读入,而不需整个读入,能够有效地缓解硬件如内存的压力。
在上述技术方案中,优选地,过滤模块在多个数据块中,查找预定类型的数据对应的每个节点的开始标记,并在找到开始标记后查找每个节点的结束标记,其中,对于预定类型的数据对应的预定节点,在读入的数据块中存在预定节点的开始标记和结束标记的情况下,过滤模块过滤掉数据块中预定节点的开始标记和结束标记之间的数据,在数据块中仅存在预定节点的开始标记的情况下,过滤模块过滤掉数据块中的预定节点的开始标记之后的数据,在数据块中仅存在预定节点的结束标记的情况下,过滤模块过滤掉数据块中的预定节点的结束标记之前的数据,在数据块中不存在预定类型数据对应的任一节点的开始标记和结束标记的情况下,则在当前查找任一节点的结束标记时,过滤模块过滤掉数据块中的所有数据。
在上述技术方案中,优选地,读入模块设置固定大小的缓存区域,通过缓存区域将XML文件分多个数据块读入。
本发明还提供一种终端,包括:如上所述的XML文件解析装置。
通过以上技术方案,本发明提供一种XML文件解析方法、一种XML文件解析装置和一种终端,通过将XML分块读入,并每次读入的时候去除其中不必要的数据,提高了XML文件的解析效率,并缓解了内存等硬件的压力。
具体实施方式
为了能够更清楚地理解本发明的上述目的、特征和优点,下面结合附图和具体实施方式对本发明进行进一步的详细描述。
在下面的描述中阐述了很多具体细节以便于充分理解本发明,但是,本发明还可以采用其他不同于在此描述的其他方式来实施,因此,本发明并不限于下面公开的具体实施例的限制。
图1是根据本发明的一个实施例的XML文件解析方法的流程图。
如图1所示,本发明提供一种XML文件解析方法,包括:步骤102,读入XML文件;步骤104,过滤掉XML文件中的预定类型的数据;步骤106,对过滤掉预定类型的数据的XML文件进行解析。通过该技术方案,不影响XML结构的情况下,将不必要的数据去掉,减小了XML文件的体积,保证了解析的效率。预定类型的数据可以是存储在XML多个类型的节点(也称为元素)下的数据,其中,对于占用空间较大的大数据,该技术方案尤为适用。解析操作可以利用DOM、SAX、DOM4J、JDOM四种方式中任一种的接口来实现。
在上述技术方案中,步骤104包括:在XML文件中查找预定类型的数据对应的每个节点的开始标记和结束标记,过滤掉每个节点的开始标记和结束标记之间的数据。通过该技术方案,由于XML文件中存储的数据,一般指文本数据,均位于其树形结构的子节点之下,所以,通过查找子节点的开始标记和结束标记,可以方便地去除该子节点下的数据。
在上述技术方案中,步骤102具体为:分多个数据块读入XML文件;步骤104具体为:在读入每个数据块时,都对每个数据块中的预定类型的数据进行过滤。通过该技术方案,将XML分块读入,而不需整个读入,能够有效地缓解硬件如内存的压力。
在上述技术方案中,步骤104具体为:在多个数据块中,查找预定类型的数据对应的每个节点的开始标记,并在找到开始标记后查找每个节点的结束标记,其中,对于预定类型的数据对应的预定节点,在读入的数据块中存在预定节点的开始标记和结束标记的情况下,过滤掉数据块中预定节点的开始标记和结束标记之间的数据,在数据块中仅存在预定节点的开始标记的情况下,过滤掉数据块中的预定节点的开始标记之后的数据,在数据块中仅存在预定节点的结束标记的情况下,过滤掉数据块中的预定节点的结束标记之前的数据,在数据块中不存在预定类型的数据对应的任一节点的开始标记和结束标记的情况下,则在当前查找任一节点的结束标记时,过滤掉数据块中的所有数据。
在上述技术方案中,步骤102具体为:设置固定大小的缓存区域,通过缓存区域将XML文件分多个数据块读入。
图2是根据本发明的一个实施例的XML文件解析装置的框图。
如图2所示,本发明还提供一种XML文件解析装置200,包括:读入模块202,读入XML文件;过滤模块204,过滤掉XML文件中的预定类型的数据;解析模块206,对过滤掉预定类型的数据的XML文件进行解析。通过该技术方案,在不影响XML结构的情况下,将不必要的数据去掉,减小了XML文件的体积,保证了解析的效率。预定类型的数据可以是存储在XML多个类型的节点(也称为元素)下的数据,其中,对于占用空间较大的大数据,该技术方案尤为适用。解析操作可以利用DOM、SAX、DOM4J、JDOM四种方式中任一种的接口来实现。
在上述技术方案中,过滤模块204在XML文件中查找预定类型的数据对应的每个节点的开始标记和结束标记,过滤掉每个节点的开始标记和结束标记之间的数据。通过该技术方案,由于XML文件中存储的数据,一般指文本数据,均位于其树形结构的子节点之下,所以,通过查找子节点的开始标记和结束标记,可以方便地去除该子节点下的数据。
在上述技术方案中,读入模块202分多个数据块读入XML文件;在读入模块202读入每个数据块时,过滤模块204都对每个数据块中的预定类型的数据进行过滤。通过该技术方案,将XML分块读入,而不需整个读入,能够有效地缓解硬件如内存的压力。
在上述技术方案中,过滤模块204在多个数据块中,查找预定类型的数据对应的每个节点的开始标记,并在找到开始标记后查找每个节点的结束标记,其中,对于预定类型的数据对应的预定节点,在读入的数据块中存在预定节点的开始标记和结束标记的情况下,过滤模块204过滤掉数据块中预定节点的开始标记和结束标记之间的数据,在数据块中仅存在预定节点的开始标记的情况下,过滤模块204过滤掉数据块中的预定节点的开始标记之后的数据,在数据块中仅存在预定节点的结束标记的情况下,过滤模块204过滤掉数据块中的预定节点的结束标记之前的数据,在数据块中不存在预定类型数据对应的任一节点的开始标记和结束标记的情况下,则在当前查找任一节点的结束标记时,过滤模块204过滤掉数据块中的所有数据。
在上述技术方案中,读入模块202设置固定大小的缓存区域,通过缓存区域将XML文件分多个数据块读入。
图3是根据本发明的一个实施例的终端的框图。
如图3所示,本发明还提供一种终端300,包括:如上所述的XML文件解析装置200。
图4是根据本发明的一个实施例的终端的使用流程图。
XML格式当前已经成为一种通用的数据交换格式,它的平台无关性、语言无关性已经给信息技术的交互带来了极大的方便。
本实施例中的终端,通过java流方式将XML文件分固定块读取,过滤其中的大数据节点,从而获取XML完整结构所在的数据串,然后利用现有DOM、SAX、DOM4J、JDOM之一提供的接口进行整个XML数据串的解析功能进行解析。对于存在一个大数据节点的XML文件,本实施例中的具体步骤如下:
步骤402,使用java中的输入流FileInputStream方法打开XML文件;
步骤404,通过read()接口读取固定大小的数据块到缓存中;
步骤406,通过String中的indexOf方法,判断缓存中的数据块中是否存在大数据节点的开始(例如,该大数据节点的开始标记可以是<binary>),如果不存在,进入步骤408,如果存在,进入步骤410;
步骤408,将当前的数据块中的所有数据存储到数据串A中,并进入步骤404,继续读取数据块;
步骤410,如果存在,将该数据块中开始标记之前的所有数据记录到数据串A中;
步骤412,继续采用indexOf方法,判断缓冲的数据块中是否存在大数据节点的结束标记(如,可以是</binary>),如果不存在,进入步骤414,如果存在,进入步骤416;
步骤414,过滤掉该数据块的全部数据,并通过read()接口继续读取下一个数据块;
步骤416,保存结束标记之后的所有数据追加到A中,包括后续读取的数据块中的数据;
步骤418,形成待解析的数据串A,其中,如果XML数据串中不只包括一个大数据节点或还存在其他类型的待过滤的数据的话,则继续查找其他的节点开始标记,并重复上述的步骤,并最终形成待解析的XML数据串;
步骤420,最后通过DOM、SAX、DOM4J、JDOM提供的接口,传入数据A串(剔除大节点的数据),正常解析XML结构。
通过以上技术方案,可以实现一种XML文件解析方法、一种XML文件解析装置以及一种终端,通过分块读入XML文件,并在每次读入的时候进行数据过滤,大大缩短了文件的处理时间,尤其是对于包含大数据节点(大小大于20M)的XML文件,同时,使得解析环境的硬件环境要求大大降低,极大地缩减了硬件的投入成本。
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。