CN109117376A - 一种ccb文件的检测方法和装置 - Google Patents
一种ccb文件的检测方法和装置 Download PDFInfo
- Publication number
- CN109117376A CN109117376A CN201811011308.0A CN201811011308A CN109117376A CN 109117376 A CN109117376 A CN 109117376A CN 201811011308 A CN201811011308 A CN 201811011308A CN 109117376 A CN109117376 A CN 109117376A
- Authority
- CN
- China
- Prior art keywords
- ccb
- file
- member variable
- types
- variables
- 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
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3604—Software analysis for verifying properties of programs
- G06F11/3608—Software analysis for verifying properties of programs using formal methods, e.g. model checking, abstract interpretation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F40/00—Handling natural language data
- G06F40/10—Text processing
- G06F40/194—Calculation of difference between files
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Physics & Mathematics (AREA)
- Quality & Reliability (AREA)
- Computer Hardware Design (AREA)
- Software Systems (AREA)
- Health & Medical Sciences (AREA)
- Artificial Intelligence (AREA)
- Audiology, Speech & Language Pathology (AREA)
- Computational Linguistics (AREA)
- General Health & Medical Sciences (AREA)
- Stored Programmes (AREA)
Abstract
本发明实施例公开了一种ccb文件的检测方法及装置,通过读取和解析第一ccb文件,得到第一ccb文件中的成员变量和变量类型,读取和解析第二ccb文件,得到第二ccb文件中的成员变量和变量类型,再遍历比对第一ccb文件中的成员变量和变量类型以及第二ccb文件中的成员变量和变量类型,查找得到第一ccb文件和第二ccb文件中不同的成员变量,实现对不同ccb文件的自动读取、解析和比对,得到第一ccb文件和第二ccb文件的异同,提高了ccb文件检测的效率,同时,避免人工比对可能出现的主观错误,提高了ccb文件检测的准确性。
Description
技术领域
本发明涉及软件技术领域,特别是涉及一种ccb文件的检测方法和装置。
背景技术
ccb文件是cocosbuilder制作生成的文件,可以供cocos2dx引擎读取后显示用户界面(User Interface,简称UI)。目前的许多应用采用ccb文件进行UI的布局和显示,如大型游戏。在有些应用中,需要能够向用户提供多语言的UI。为了开发出多语言的UI,一种语言下的ccb文件可以被复制并通过cocosbuilder修改其相应的语言内容为另一种语言,从而得到多种语言下的多个ccb文件。当某种语言下的某个ccb文件有所修改时,需要检测该ccb文件的修改是否会影响到其他语言下的相应ccb文件,从而避免这种影响引起应用程序崩溃。目前,ccb文件通常的检测方式在于,以cocosbuilder打开需要检测的两个ccb文件,技术人员比对cocosbuilder显示出的两个ccb文件的代码,从而确定是否存在上述影响。但这种人工比对的方式不仅费时费力而且错误率较高。
发明内容
为解决上述技术问题,本申请实施例提供一种ccb文件的检测方法和装置,以实现对ccb文件的自动检测,从而提高ccb文件检测的效率以及准确性。
本申请实施例提供的一种ccb文件的检测方法,包括:
读取第一ccb文件,并对所述第一ccb文件进行解析,得到所述第一ccb文件中的成员变量和变量类型;
读取第二ccb文件,并对所述第二ccb文件进行解析,得到所述第二ccb文件中的成员变量和变量类型;
通过遍历所述第一ccb文件中的成员变量和变量类型以及遍历所述第二ccb文件中的成员变量和变量类型,查找第一成员变量、第二成员变量及第三成员变量;其中,所述第一成员变量属于所述第一ccb文件中的成员变量但不属于所述第二ccb文件中的成员变量,所述第二成员变量属于所述第二ccb文件中的成员变量但不属于所述第一ccb文件中的成员变量,所述第三成员变量既属于所述第一ccb文件中的成员变量又属于所述第二ccb文件中的成员变量,所述第三成员变量在所述第一ccb文件中的变量类型与所述第三成员变量在所述第二ccb文件中的变量类型不同;
将所述第一成员变量、所述第二成员变量、所述第三成员变量、所述第三成员变量在所述第一ccb文件中的变量类型和所述第三成员变量在所述第二ccb文件中的变量类型输出为检测结果。
可选的,所述读取第一ccb文件,包括:
调用用于读取数据的应用程序编程接口API对所述第一ccb文件进行读入,生成所述第一ccb文件的数据集合。
可选的,所述读取第二ccb文件,包括:
调用用于读取数据的应用程序编程接口API对所述第二ccb文件进行读入,生成第二ccb文件的数据集合。
可选的,所述对所述第一ccb文件进行解析,得到所述第一ccb文件中的成员变量和变量类型,包括:
通过递归函数对所述第一ccb文件的元素节点进行遍历;
当遍历到的元素节点的类型为Vector或Map时,通过所述递归函数对所述元素节点的子元素节点进行遍历;
当遍历到的元素节点的类型值为String时,根据所述元素节点的键和值确定所述第一ccb文件中的成员变量和变量类型;
将确定出的所述第一ccb文件中的成员变量和变量类型记录到第一容器。
可选的,所述对所述第二ccb文件进行解析,得到所述第二ccb文件中的成员变量和变量类型,包括:
通过递归函数对所述第二ccb文件的元素节点进行遍历;
当遍历到的元素节点的类型为Vector或Map时,通过所述递归函数对所述元素节点的子元素节点进行遍历;
当遍历到的元素节点的类型值为String时,根据所述元素节点的键和值确定所述第二ccb文件中的成员变量和变量类型;
将确定出的所述第二ccb文件中的成员变量和变量类型记录到第二容器。
可选的,通过遍历所述第一ccb文件中的成员变量和变量类型以及遍历所述第二ccb文件中的成员变量和变量类型,查找第一成员变量、第二成员变量及第三成员变量,包括:
遍历所述第一ccb文件的每个成员变量,查找是否存在于所述第二ccb文件的成员变量中;
当所述第一ccb文件中被遍历到的成员变量没有存在于所述第二ccb文件的成员变量中,将所述成员变量确定为所述第一成员变量;
当所述第一ccb文件中被遍历到的成员变量存在于所述第二ccb文件的成员变量中,确定所述成员变量在所述第一ccb文件中的变量类型与所述成员变量在所述第二ccb文件中的变量类型是否相同,若不不相同则将所述成员变量确定为所述第三成员变量;
遍历所述第二ccb文件的每个成员变量,查找是否存在于所述第一ccb文件的成员变量中;
当所述第二ccb文件中被遍历到的成员变量没有存在于所述第一ccb文件的成员变量中,将所述成员变量确定为所述第二成员变量;
当所述第二ccb文件中被遍历到的成员变量存在于所述第一ccb文件的成员变量中,确定所述成员变量在所述第一ccb文件中的变量类型与所述成员变量在所述第二ccb文件中的变量类型是否相同,若不相同则将所述成员变量确定为所述第三成员变量。
可选的,所述将所述第一成员变量、所述第二成员变量、所述第三成员变量、所述第三成员变量在所述第一ccb文件中的变量类型和所述第三成员变量在所述第二ccb文件中的变量类型输出为检测结果,包括:
当查找出所述第一成员变量时,将所述第一成员变量记录成所述检测结果中的第一错误条目;
当查找出所述第二成员变量时,将所述第二成员变量记录成所述检测结果中的第二错误条目;
当查找出所述第三成员变量时,将所述第三成员变量以及所述第三成员变量在所述第一ccb文件中的变量类型和所述第三成员变量在所述第二ccb文件中的变量类型记录成所述检测结果中的第三错误条目;
输出包含所述第一错误条目、所述第二错误条目和所述第三错误条目的所述检测结果。
本申请实施例提供的一种ccb文件的检测装置,包括:
第一读取单元,用于读取第一ccb文件;
第一解析单元,用于对所述第一ccb文件进行解析,得到所述第一ccb文件中的成员变量和变量类型;
第二读取单元,用于读取第二ccb文件;
第二解析单元,用于对所述第二ccb文件进行解析,得到所述第二ccb文件中的成员变量和变量类型;
变量遍历单元,用于通过遍历所述第一ccb文件中的成员变量和变量类型以及遍历所述第二ccb文件中的成员变量和变量类型,查找第一成员变量、第二成员变量及第三成员变量;其中,所述第一成员变量属于所述第一ccb文件中的成员变量但不属于所述第二ccb文件中的成员变量,所述第二成员变量属于所述第二ccb文件中的成员变量但不属于所述第一ccb文件中的成员变量,所述第三成员变量既属于所述第一ccb文件中的成员变量又属于所述第二ccb文件中的成员变量,所述第三成员变量在所述第一ccb文件中的变量类型与所述第三成员变量在所述第二ccb文件中的变量类型不同;
输出单元,用于将所述第一成员变量、所述第二成员变量、所述第三成员变量、所述第三成员变量在所述第一ccb文件中的变量类型和所述第三成员变量在所述第二ccb文件中的变量类型输出为检测结果。
可选的,所述第一读取单元具体用于:
调用用于读取数据的应用程序编程接口API对所述第一ccb文件进行读入,生成所述第一ccb文件的数据集合。
可选的,所述第二读取单元具体用于:
调用用于读取数据的应用程序编程接口API对所述第二ccb文件进行读入,生成第二ccb文件的数据集合。
可选的,所述第一解析单元,包括:
第一文件遍历单元,用于通过递归函数对所述第一ccb文件的元素节点进行遍历;
当遍历到的元素节点的类型为Vector或Map时,通过所述递归函数对所述元素节点的子元素节点进行遍历;
当遍历到的元素节点的类型值为String时,根据所述元素节点的键和值确定所述第一ccb文件中的成员变量和变量类型;
第一记录单元,用于将确定出的所述第一ccb文件中的成员变量和变量类型记录到第一容器。
可选的,所述第二解析单元,包括:
第二文件遍历单元,用于通过递归函数对所述第二ccb文件的元素节点进行遍历;
当遍历到的元素节点的类型为Vector或Map时,通过所述递归函数对所述元素节点的子元素节点进行遍历;
当遍历到的元素节点的类型值为String时,根据所述元素节点的键和值确定所述第二ccb文件中的成员变量和变量类型;
第二记录单元,用于将确定出的所述第二ccb文件中的成员变量和变量类型记录到第二容器。
可选的,变量遍历单元,包括:
第一变量遍历子单元,用于遍历所述第一ccb文件的每个成员变量,查找是否存在于所述第二ccb文件的成员变量中;
当所述第一ccb文件中被遍历到的成员变量没有存在于所述第二ccb文件的成员变量中,将所述成员变量确定为所述第一成员变量;
当所述第一ccb文件中被遍历到的成员变量存在于所述第二ccb文件的成员变量中,确定所述成员变量在所述第一ccb文件中的变量类型与所述成员变量在所述第二ccb文件中的变量类型是否相同,若不不相同则将所述成员变量确定为所述第三成员变量;
第二变量遍历子单元,用于遍历所述第二ccb文件的每个成员变量,查找是否存在于所述第一ccb文件的成员变量中;
当所述第二ccb文件中被遍历到的成员变量没有存在于所述第一ccb文件的成员变量中,将所述成员变量确定为所述第二成员变量;
当所述第二ccb文件中被遍历到的成员变量存在于所述第一ccb文件的成员变量中,确定所述成员变量在所述第一ccb文件中的变量类型与所述成员变量在所述第二ccb文件中的变量类型是否相同,若不相同则将所述成员变量确定为所述第三成员变量。
可选的,所述输出单元具体用于:
当查找出所述第一成员变量时,将所述第一成员变量记录成所述检测结果中的第一错误条目;
当查找出所述第二成员变量时,将所述第二成员变量记录成所述检测结果中的第二错误条目;
当查找出所述第三成员变量时,将所述第三成员变量以及所述第三成员变量在所述第一ccb文件中的变量类型和所述第三成员变量在所述第二ccb文件中的变量类型记录成所述检测结果中的第三错误条目;
输出包含所述第一错误条目、所述第二错误条目和所述第三错误条目的所述检测结果。
在本申请实施例中,通过读取和解析第一ccb文件,得到第一ccb文件中的成员变量和变量类型,读取和解析第二ccb文件,得到第二ccb文件中的成员变量和变量类型,再遍历比对第一ccb文件中的成员变量和变量类型以及第二ccb文件中的成员变量和变量类型,查找得到第一ccb文件和第二ccb文件中不同的成员变量,实现对不同ccb文件的自动读取、解析和比对,得到第一ccb文件和第二ccb文件的异同,提高了ccb文件检测的效率,同时,避免人工比对可能出现的主观错误,提高了ccb文件检测的准确性。例如,可以通过检测得到在第一ccb文件中存在但在第二ccb文件中不存在的第一成员变量,在第二ccb文件中存在但在第一ccb文件中不存在的第二成员变量,在第一ccb文件和第二ccb文件中均存在、但在第一ccb文件和第二ccb文件中对应的变量类型不同的第三成员变量等。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请中记载的一些实施例,对于本领域普通技术人员来讲,还可以根据这些附图获得其他的附图。
图1为本申请实施例提供的一种ccb文件的检测方法流程图;
图2为本申请实施例提供的一种ccb文件的检测装置的结构框图。
具体实施方式
ccb文件是cocosbuilder制作生成的文件,可以供cocos2dx引擎读取后显示用户界面,具体的,cocos2dx引擎在读入ccb文件后,会根据ccb文件中的成员变量和该成员变量的变量类型,创建出指定的绘制元素,例如成员名为m1,类型为Sprite,则cocos2dx引擎会创建一个变量名为m1、类型为Sprite的元素,在界面中绘制出来。
发明人经过研究发现,在有些应用中,需要能够像用户提供多语言的UI。为了开发出多语言的UI,可以将一种语言下的ccb文件复制并通过cocosbuilder修改其语言内容为另一种语言,从而得到多种语言下的多个ccb文件。然而,当某种语言下的某个ccb文件有所修改时,需要检测该ccb文件的修改是否会影响到其他语言下的相应ccb文件,若其他语言下的相应ccb文件中存在成员变量或成员变量的变量类型未经修改,则可能会导致多个ccb文件中具有不同的成员变量或同一成员变量具有不同的变量类型。而cocos2dx引擎得到的成员变量不同或同一成员变量的变量类型不同,会导致元素创建失败,严重时可能导致整体程序崩溃。
目前,ccb文件通常的检测方式在于,以cocosbuilder打开需要检测的两个ccb文件,技术人员比对cocosbuilder显示出的两个ccb文件的代码,从而确定是否存在上述影响,检测是否存在上述影响,主要通过检测ccb文件中的成员变量和变量类型的异同。然而,一个ccb文件中通常包括大量的成员变量及其变量类型,这种人工比对的方式不仅费时费力而且错误率较高。
基于此,本申请实施例提供了一种ccb文件的检测方法及装置,通过读取和解析第一ccb文件,得到第一ccb文件中的成员变量和变量类型,读取和解析第二ccb文件,得到第二ccb文件中的成员变量和变量类型,再遍历比对第一ccb文件中的成员变量和变量类型以及第二ccb文件中的成员变量和变量类型,查找得到第一ccb文件和第二ccb文件中不同的成员变量,实现对不同ccb文件的自动读取、解析和比对,得到第一ccb文件和第二ccb文件的异同,提高了ccb文件检测的效率,同时,避免人工比对可能出现的主观错误,提高了ccb文件检测的准确性。例如,可以通过检测得到在第一ccb文件中存在但在第二ccb文件中不存在的第一成员变量,在第二ccb文件中存在但在第一ccb文件中不存在的第二成员变量,在第一ccb文件和第二ccb文件中均存在、但在第一ccb文件和第二ccb文件中对应的变量类型不同的第三成员变量等。
为了使本技术领域的人员更好地理解本申请方案,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
参考图1所示,为本申请实施例提供的一种ccb文件的检测方法的流程图,可以包括以下步骤。
S101,读取第一ccb文件,并对第一ccb文件进行解析,得到第一ccb文件中的成员变量和变量类型。
第一ccb文件是cocobuilder制作生成的文件,可以供cocos2dx引擎读取后显示用户界面,目前有许多应用ccb文件进行用户界面的显示。第一ccb文件的格式可以包括多个元素节点,元素节点可以为成员变量,成员变量具有变量类型,第一ccb文件的格式例如可以为xml。
具体实施时,成员变量可以在memberVarAssignmentName元素下,成员变量的变量类型存在customClass变量下。其中,成员变量可以通过成员标识来表示,成员标识用于识别不同的成员,例如可以是成员名m1等;变量类型是成员的类型,可以是数组(Vector)类型、字典(Map)类型或字符串(String)类型等,举例来说,成员m1的类型可以是字符串类型,该字符串为“sprite”。
读取第一ccb文件,可以具体为,调用用于读写数据的应用程序编程接口API对第一ccb文件进行读入,生成第一ccb文件的数据集合。生成的该数据集合中,存储有第一ccb文件中的各个成员变量及其变量类型。
例如,可以通过cocos2d提供的API:FileUtils::getValueMapFromFile读入第一ccb文件,生成第一ccb文件的数据集合ValueMap1。该数据集合ValueMap1的类型为map类型,通过多个键(Key)和值(Value)的对应关系,表示第一ccb文件中的各个成员变量及其变量类型,其中,键对应成员变量,值对应成员变量的变量类型。
在读取第一ccb文件后,可以通过递归函数对第一ccb文件的元素节点进行遍历。作为一种可能的实现方式,可以通过递归函数enumVM对数据集合ValueMap1进行遍历。
当遍历到的元素节点的类型为Vector或Map时,则通过递归函数对元素节点的子元素节点进行遍历。具体的,遍历到的元素节点的类型为Value::Type::VECTOR时,表示该元素节点为数组类型,则通过递归函数enumVM对该数组中的元素进行遍历;遍历到的元素节点的类型为Value::Type::MAP时,表示该元素节点为字典类型,可以通过递归函数enumVM对该元素节点的子节点进行遍历。
当遍历到的元素节点的类型为String时,根据元素节点的键和值确定第一ccb文件中的成员变量和变量类型。具体的,在memberVarAssignmentName的内容strKey不为空时,可以通过strKey=Value.asString()获取键的内容,即获取成员变量的内容,相应的,可以通过strValue=valuemap[“customClass”]得到对应的customClass的内容strValue,即得到变量类型的内容。
将确定出的第一ccb文件中的成员变量和变量类型记录到第一容器S1。具体的,可以预先定义全局容器:std::map<std::string,std::string>contents,全局容器的类型为map类型,其中,以字符串的形式存储键和值。通过content[sstrKey]=strValue,将确定出的第一ccb文件中的成员变量和变量类型存储在全局容器contents中,再将全局容器contents中的数据复制至第一容器S1中,与全局容器contents类似,第一容器S1的类型为map类型,其中,以字符串的形式存储键和值。在将全局容器contents中的数据复制至第一容器S1中后,可以通过contents.clear()将全局容器contents清空至初始状态。
S102,读取第二ccb文件,并对第二ccb文件进行解析,得到第二ccb文件中的成员变量和变量类型。
第二ccb文件可以是与第一ccb文件具有不同语言的文件,在具体实施时,可以对第一ccb文件和/或第二ccb文件进行了修改,导致第一ccb文件和第二ccb文件的内容有所不同。当然,本申请实施例提供的技术方案并不限定第一ccb文件和第二ccb不同,第一ccb文件和第二ccb文件也可以相同。
第二ccb文件的格式及第二ccb文件中的成员变量和变量类型,可以参考第一ccb文件,在此不做赘述。
读取第二ccb文件,可以具体为,调用用于读写数据的应用程序编程接口API对第二ccb文件进行读入,生成第二ccb文件的数据集合。生成的该数据集合例如可以是ValueMap2,其中存储有第二ccb文件中的各个成员变量及其变量类型。
在读取第二ccb文件后,可以通过递归函数对第二ccb文件的元素节点进行遍历,作为一种可能的实现方式,可以通过递归函数enumVM对数据集合ValueMap2进行遍历。
当遍历到的元素节点的类型为Vector或Map时,则通过递归函数对元素节点的子元素节点进行遍历;当遍历到的元素节点的类型为String时,根据元素节点的键和值确定第二ccb文件中的成员变量和变量类型。
将确定出的第二ccb文件中的成员变量和变量类型记录到第二容器S2。具体的,可以通过content[sstrKey]=strValue,将确定出的第二ccb文件中的成员变量和变量类型存储在全局容器contents中,再将全局容器contents中的数据复制至第二容器S2中,第一容器S2的类型为map类型,其中,以字符串的形式存储键和值。在将全局容器contents中的数据复制至第二容器S2中后,可以通过contents.clear()将全局容器contents清空至初始状态。
可以理解的是,S101和S102按照一定的顺序执行,也可以同时执行,在此不做限定。
S103,通过遍历第一ccb文件中的成员变量和变量类型以及遍历第二ccb文件中的成员变量和变量类型,查找第一成员变量、第二成员变量及第三成员变量。
在本申请实施例中,第一成员变量属于第一ccb文件中的成员变量但不属于第二ccb文件中的成员变量;第二成员变量属于第二ccb文件中的成员变量但不属于第一ccb文件中的成员变量;第三成员变量既属于第一ccb文件中的成员变量又属于第二ccb文件中的成员变量,但第三成员变量在第一ccb文件中的变量类型与第三成员变量在所述第二ccb文件中的变量类型不同。
具体的,可以遍历第一ccb文件的每个成员变量,查找这些成员变量是否存在于第二ccb文件的成员变量中。当第一ccb文件中被遍历到的成员变量没有存在于第二ccb文件的成员变量中,将该成员变量确定为第一成员变量;当第一ccb文件中被遍历到的成员变量存在于第二ccb文件的成员变量中,确定成员变量在第一ccb文件中的变量类型与成员变量在第二ccb文件中的变量类型是否相同,若不相同则将该成员变量确定为第三成员变量。
具体的,可以遍历所述第二ccb文件的每个成员变量,查找是否存在于所述第一ccb文件的成员变量中。当第二ccb文件中被遍历到的成员变量没有存在于第一ccb文件的成员变量中,将成员变量确定为所述第二成员变量;当第二ccb文件中被遍历到的成员变量存在于第一ccb文件的成员变量中,确定成员变量在第一ccb文件中的变量类型与成员变量在第二ccb文件中的变量类型是否相同,若不相同则将成员变量确定为第三成员变量。
对第一ccb文件的每个成员变量进行遍历和对第二ccb文件的每个成员变量进行遍历,按照顺序进行,也可以同时进行。在第一ccb文件中被遍历到的成员变量存在于第二ccb文件的成员变量中时,可以不再对第二ccb文件中的该成员变量进行遍历,同样,在第二ccb文件中被遍历到的成员变量存在于第一ccb文件的成员变量中时,可以不再对第二ccb文件中的该成员变量进行遍历,以减少需要执行的步骤,提高遍历效率。
遍历第一ccb文件中的成员变量和变量类型以及遍历第二ccb文件中的成员变量和变量类型,可以分别在第一容器S1和第二容器S2中进行,以查找得到第一成员变量、第二成员变量及第三成员变量。
举例来说,在第一容器S1中遍历,对于S1中的元素节点Key1和变量类型Value1,可以先判断第二容器S2中是否存在Key1,如果不存在,则Key1作为第一成员变量;对于S1中的元素节点Key2和变量类型Value2,如果S2中存在元素节点Key2和变量类型Value3,判断Value2与Value1是否相同,若不同,则将Key2作为第三成员变量;在S2中遍历,对于S2中的元素节点Key3和Value3,可以判断S1中是否存在Key3,如果不存在,则Key3作为第二成员变量。由于再对S1遍历的过程中,已经确定出第三成员变量,则如果S1中存在Key3,可不再做进一步判断。
S104,将第一成员变量、第二成员变量、第三成员变量、第三成员变量在第一ccb文件中的变量类型和第三成员变量在第二ccb文件中的变量类型输出为检测结果。
具体的,当查找出第一成员变量时,可以将第一成员变量记录成检测结果中的第一错误条目。第一错误条目可以具有第一标识,第一标识表示第一成员变量为第一ccb文件中的成员变量。例如对于第一成员变量Key1,可以形成第一错误条目:Key1-1,其中“-1”为第一标识。
具体的,当查找出第二成员变量时,可以将第二成员变量记录成检测结果中的第二错误条目。第二错误条目可以具有第二标识,第二标识标识第二成员变量为第二ccb文件中的成员变量。例如对于第二成员变量Key3,可以形成第二错误条目:Key3-2,其中“-2”为第二标识。
具体的,当查找到第三成员变量时,可以将第三成员变量以及第三成员变量在第一ccb文件中的变量类型和第三成员变量在第二ccb中的变量类型记录成检测结果中的第三错误条目。例如对于第三成员变量Key2,在S1中存在元素节点Key2和变量类型Value2,S2中存在元素节点Key2和变量类型Value3,则形成第三错误条目:Key2-Value2-Value3。
在本申请实施例中,还可以通过vector<std::string>设置第三容器erroritems,并将检测结果中的第一错误条目、第二错误条目和第三错误条目可以存储第三容器erroritems中。
在形成检测结果中的第一错误条目、第二错误条目和第三错误条目后,可以输出包含第一错误条目、第二错误条目和第三错误条目作为检测结果,分别表示属于第一ccb文件中的成员变量但不属于第二ccb文件中的第一成员变量,属于第二ccb文件中的成员变量但不属于第一ccb文件中的第二成员变量,既属于第一ccb文件中的成员变量又属于第二ccb文件中的成员变量,但第三成员变量在第一ccb文件中的变量类型与第三成员变量在所述第二ccb文件中的变量类型不同的第三成员变量。
本申请实施例提供了一种ccb文件的检测方法,通过读取和解析第一ccb文件,得到第一ccb文件中的成员变量和变量类型,读取和解析第二ccb文件,得到第二ccb文件中的成员变量和变量类型,再遍历比对第一ccb文件中的成员变量和变量类型以及第二ccb文件中的成员变量和变量类型,查找得到第一ccb文件和第二ccb文件中不同的成员变量,实现对不同ccb文件的自动读取、解析和比对,得到第一ccb文件和第二ccb文件的异同,提高了ccb文件检测的效率,同时,避免人工比对可能出现的主观错误,提高了ccb文件检测的准确性。
基于以上实施例提供的一种ccb文件的检测方法,本申请实施例还提供了一种ccb文件的检测装置,下面结合附图来详细说明其工作原理。
参见图2,该图为本申请实施例提供的一种ccb文件的检测装置的结构框图,该装置包括:
第一读取单元110,用于读取第一ccb文件;
第一解析单元120,用于对所述第一ccb文件进行解析,得到所述第一ccb文件中的成员变量和变量类型;
第二读取单元130,用于读取第二ccb文件;
第二解析单元140,用于对所述第二ccb文件进行解析,得到所述第二ccb文件中的成员变量和变量类型;
变量遍历单元150,用于通过遍历所述第一ccb文件中的成员变量和变量类型以及遍历所述第二ccb文件中的成员变量和变量类型,查找第一成员变量、第二成员变量及第三成员变量;其中,所述第一成员变量属于所述第一ccb文件中的成员变量但不属于所述第二ccb文件中的成员变量,所述第二成员变量属于所述第二ccb文件中的成员变量但不属于所述第一ccb文件中的成员变量,所述第三成员变量既属于所述第一ccb文件中的成员变量又属于所述第二ccb文件中的成员变量,所述第三成员变量在所述第一ccb文件中的变量类型与所述第三成员变量在所述第二ccb文件中的变量类型不同;
输出单元160,用于将所述第一成员变量、所述第二成员变量、所述第三成员变量、所述第三成员变量在所述第一ccb文件中的变量类型和所述第三成员变量在所述第二ccb文件中的变量类型输出为检测结果。
可选的,所述第一读取单元具体用于:
调用用于读取数据的应用程序编程接口API对所述第一ccb文件进行读入,生成所述第一ccb文件的数据集合。
可选的,所述第二读取单元具体用于:
调用用于读取数据的应用程序编程接口API对所述第二ccb文件进行读入,生成第二ccb文件的数据集合。
可选的,所述第一解析单元,包括:
第一文件遍历单元,用于通过递归函数对所述第一ccb文件的元素节点进行遍历;
当遍历到的元素节点的类型为Vector或Map时,通过所述递归函数对所述元素节点的子元素节点进行遍历;
当遍历到的元素节点的类型值为String时,根据所述元素节点的键和值确定所述第一ccb文件中的成员变量和变量类型;
第一记录单元,用于将确定出的所述第一ccb文件中的成员变量和变量类型记录到第一容器。
可选的,所述第二解析单元,包括:
第二文件遍历单元,用于通过递归函数对所述第二ccb文件的元素节点进行遍历;
当遍历到的元素节点的类型为Vector或Map时,通过所述递归函数对所述元素节点的子元素节点进行遍历;
当遍历到的元素节点的类型值为String时,根据所述元素节点的键和值确定所述第二ccb文件中的成员变量和变量类型;
第二记录单元,用于将确定出的所述第二ccb文件中的成员变量和变量类型记录到第二容器。
可选的,变量遍历单元,包括:
第一变量遍历子单元,用于遍历所述第一ccb文件的每个成员变量,查找是否存在于所述第二ccb文件的成员变量中;
当所述第一ccb文件中被遍历到的成员变量没有存在于所述第二ccb文件的成员变量中,将所述成员变量确定为所述第一成员变量;
当所述第一ccb文件中被遍历到的成员变量存在于所述第二ccb文件的成员变量中,确定所述成员变量在所述第一ccb文件中的变量类型与所述成员变量在所述第二ccb文件中的变量类型是否相同,若不不相同则将所述成员变量确定为所述第三成员变量;
第二变量遍历子单元,用于遍历所述第二ccb文件的每个成员变量,查找是否存在于所述第一ccb文件的成员变量中;
当所述第二ccb文件中被遍历到的成员变量没有存在于所述第一ccb文件的成员变量中,将所述成员变量确定为所述第二成员变量;
当所述第二ccb文件中被遍历到的成员变量存在于所述第一ccb文件的成员变量中,确定所述成员变量在所述第一ccb文件中的变量类型与所述成员变量在所述第二ccb文件中的变量类型是否相同,若不相同则将所述成员变量确定为所述第三成员变量。
可选的,所述输出单元具体用于:
当查找出所述第一成员变量时,将所述第一成员变量记录成所述检测结果中的第一错误条目;
当查找出所述第二成员变量时,将所述第二成员变量记录成所述检测结果中的第二错误条目;
当查找出所述第三成员变量时,将所述第三成员变量以及所述第三成员变量在所述第一ccb文件中的变量类型和所述第三成员变量在所述第二ccb文件中的变量类型记录成所述检测结果中的第三错误条目;
输出包含所述第一错误条目、所述第二错误条目和所述第三错误条目的所述检测结果。
在本申请实施例中,通过读取和解析第一ccb文件,得到第一ccb文件中的成员变量和变量类型,读取和解析第二ccb文件,得到第二ccb文件中的成员变量和变量类型,再遍历比对第一ccb文件中的成员变量和变量类型以及第二ccb文件中的成员变量和变量类型,查找得到第一ccb文件和第二ccb文件中不同的成员变量,实现对不同ccb文件的自动读取、解析和比对,得到第一ccb文件和第二ccb文件的异同,提高了ccb文件检测的效率,同时,避免人工比对可能出现的主观错误,提高了ccb文件检测的准确性。例如,可以通过检测得到在第一ccb文件中存在但在第二ccb文件中不存在的第一成员变量,在第二ccb文件中存在但在第一ccb文件中不存在的第二成员变量,在第一ccb文件和第二ccb文件中均存在、但在第一ccb文件和第二ccb文件中对应的变量类型不同的第三成员变量等。
本发明实施例中提到的“第一……”、“第一……”等名称中的“第一”只是用来做名字标识,并不代表顺序上的第一。该规则同样适用于“第二”等。
通过以上的实施方式的描述可知,本领域的技术人员可以清楚地了解到上述实施例方法中的全部或部分步骤可借助软件加通用硬件平台的方式来实现。基于这样的理解,本发明的技术方案可以以软件产品的形式体现出来,该计算机软件产品可以存储在存储介质中,如只读存储器(英文:read-only memory,ROM)/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者诸如路由器等网络通信设备)执行本发明各个实施例或者实施例的某些部分所述的方法。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于方法实施例和设备实施例而言,由于其基本相似于系统实施例,所以描述得比较简单,相关之处参见系统实施例的部分说明即可。以上所描述的设备及系统实施例仅仅是示意性的,其中作为分离部件说明的模块可以是或者也可以不是物理上分开的,作为模块显示的部件可以是或者也可以不是物理模块,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
以上所述仅是本发明的优选实施方式,并非用于限定本发明的保护范围。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明的前提下,还可以作出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。
Claims (14)
1.一种ccb文件的检测方法,其特征在于,包括:
读取第一ccb文件,并对所述第一ccb文件进行解析,得到所述第一ccb文件中的成员变量和变量类型;
读取第二ccb文件,并对所述第二ccb文件进行解析,得到所述第二ccb文件中的成员变量和变量类型;
通过遍历所述第一ccb文件中的成员变量和变量类型以及遍历所述第二ccb文件中的成员变量和变量类型,查找第一成员变量、第二成员变量及第三成员变量;其中,所述第一成员变量属于所述第一ccb文件中的成员变量但不属于所述第二ccb文件中的成员变量,所述第二成员变量属于所述第二ccb文件中的成员变量但不属于所述第一ccb文件中的成员变量,所述第三成员变量既属于所述第一ccb文件中的成员变量又属于所述第二ccb文件中的成员变量,所述第三成员变量在所述第一ccb文件中的变量类型与所述第三成员变量在所述第二ccb文件中的变量类型不同;
将所述第一成员变量、所述第二成员变量、所述第三成员变量、所述第三成员变量在所述第一ccb文件中的变量类型和所述第三成员变量在所述第二ccb文件中的变量类型输出为检测结果。
2.根据权利要求1所述的方法,其特征在于,所述读取第一ccb文件,包括:
调用用于读取数据的应用程序编程接口API对所述第一ccb文件进行读入,生成所述第一ccb文件的数据集合。
3.根据权利要求1所述的方法,其特征在于,所述读取第二ccb文件,包括:
调用用于读取数据的应用程序编程接口API对所述第二ccb文件进行读入,生成第二ccb文件的数据集合。
4.根据权利要求1所述的方法,其特征在于,所述对所述第一ccb文件进行解析,得到所述第一ccb文件中的成员变量和变量类型,包括:
通过递归函数对所述第一ccb文件的元素节点进行遍历;
当遍历到的元素节点的类型为Vector或Map时,通过所述递归函数对所述元素节点的子元素节点进行遍历;
当遍历到的元素节点的类型值为String时,根据所述元素节点的键和值确定所述第一ccb文件中的成员变量和变量类型;
将确定出的所述第一ccb文件中的成员变量和变量类型记录到第一容器。
5.根据权利要求1所述的方法,其特征在于,所述对所述第二ccb文件进行解析,得到所述第二ccb文件中的成员变量和变量类型,包括:
通过递归函数对所述第二ccb文件的元素节点进行遍历;
当遍历到的元素节点的类型为Vector或Map时,通过所述递归函数对所述元素节点的子元素节点进行遍历;
当遍历到的元素节点的类型值为String时,根据所述元素节点的键和值确定所述第二ccb文件中的成员变量和变量类型;
将确定出的所述第二ccb文件中的成员变量和变量类型记录到第二容器。
6.根据权利要求1所述的方法,其特征在于,通过遍历所述第一ccb文件中的成员变量和变量类型以及遍历所述第二ccb文件中的成员变量和变量类型,查找第一成员变量、第二成员变量及第三成员变量,包括:
遍历所述第一ccb文件的每个成员变量,查找是否存在于所述第二ccb文件的成员变量中;
当所述第一ccb文件中被遍历到的成员变量没有存在于所述第二ccb文件的成员变量中,将所述成员变量确定为所述第一成员变量;
当所述第一ccb文件中被遍历到的成员变量存在于所述第二ccb文件的成员变量中,确定所述成员变量在所述第一ccb文件中的变量类型与所述成员变量在所述第二ccb文件中的变量类型是否相同,若不不相同则将所述成员变量确定为所述第三成员变量;
遍历所述第二ccb文件的每个成员变量,查找是否存在于所述第一ccb文件的成员变量中;
当所述第二ccb文件中被遍历到的成员变量没有存在于所述第一ccb文件的成员变量中,将所述成员变量确定为所述第二成员变量;
当所述第二ccb文件中被遍历到的成员变量存在于所述第一ccb文件的成员变量中,确定所述成员变量在所述第一ccb文件中的变量类型与所述成员变量在所述第二ccb文件中的变量类型是否相同,若不相同则将所述成员变量确定为所述第三成员变量。
7.根据权利要求1所述的方法,其特征在于,所述将所述第一成员变量、所述第二成员变量、所述第三成员变量、所述第三成员变量在所述第一ccb文件中的变量类型和所述第三成员变量在所述第二ccb文件中的变量类型输出为检测结果,包括:
当查找出所述第一成员变量时,将所述第一成员变量记录成所述检测结果中的第一错误条目;
当查找出所述第二成员变量时,将所述第二成员变量记录成所述检测结果中的第二错误条目;
当查找出所述第三成员变量时,将所述第三成员变量以及所述第三成员变量在所述第一ccb文件中的变量类型和所述第三成员变量在所述第二ccb文件中的变量类型记录成所述检测结果中的第三错误条目;
输出包含所述第一错误条目、所述第二错误条目和所述第三错误条目的所述检测结果。
8.一种ccb文件的检测装置,其特征在于,包括:
第一读取单元,用于读取第一ccb文件;
第一解析单元,用于对所述第一ccb文件进行解析,得到所述第一ccb文件中的成员变量和变量类型;
第二读取单元,用于读取第二ccb文件;
第二解析单元,用于对所述第二ccb文件进行解析,得到所述第二ccb文件中的成员变量和变量类型;
变量遍历单元,用于通过遍历所述第一ccb文件中的成员变量和变量类型以及遍历所述第二ccb文件中的成员变量和变量类型,查找第一成员变量、第二成员变量及第三成员变量;其中,所述第一成员变量属于所述第一ccb文件中的成员变量但不属于所述第二ccb文件中的成员变量,所述第二成员变量属于所述第二ccb文件中的成员变量但不属于所述第一ccb文件中的成员变量,所述第三成员变量既属于所述第一ccb文件中的成员变量又属于所述第二ccb文件中的成员变量,所述第三成员变量在所述第一ccb文件中的变量类型与所述第三成员变量在所述第二ccb文件中的变量类型不同;
输出单元,用于将所述第一成员变量、所述第二成员变量、所述第三成员变量、所述第三成员变量在所述第一ccb文件中的变量类型和所述第三成员变量在所述第二ccb文件中的变量类型输出为检测结果。
9.根据权利要求8所述的装置,其特征在于,所述第一读取单元具体用于:
调用用于读取数据的应用程序编程接口API对所述第一ccb文件进行读入,生成所述第一ccb文件的数据集合。
10.根据权利要求8所述的装置,其特征在于,所述第二读取单元具体用于:
调用用于读取数据的应用程序编程接口API对所述第二ccb文件进行读入,生成第二ccb文件的数据集合。
11.根据权利要求8所述的装置,其特征在于,所述第一解析单元,包括:
第一文件遍历单元,用于通过递归函数对所述第一ccb文件的元素节点进行遍历;
当遍历到的元素节点的类型为Vector或Map时,通过所述递归函数对所述元素节点的子元素节点进行遍历;
当遍历到的元素节点的类型值为String时,根据所述元素节点的键和值确定所述第一ccb文件中的成员变量和变量类型;
第一记录单元,用于将确定出的所述第一ccb文件中的成员变量和变量类型记录到第一容器。
12.根据权利要求8所述的装置,其特征在于,所述第二解析单元,包括:
第二文件遍历单元,用于通过递归函数对所述第二ccb文件的元素节点进行遍历;
当遍历到的元素节点的类型为Vector或Map时,通过所述递归函数对所述元素节点的子元素节点进行遍历;
当遍历到的元素节点的类型值为String时,根据所述元素节点的键和值确定所述第二ccb文件中的成员变量和变量类型;
第二记录单元,用于将确定出的所述第二ccb文件中的成员变量和变量类型记录到第二容器。
13.根据权利要求8所述的装置,其特征在于,变量遍历单元,包括:
第一变量遍历子单元,用于遍历所述第一ccb文件的每个成员变量,查找是否存在于所述第二ccb文件的成员变量中;
当所述第一ccb文件中被遍历到的成员变量没有存在于所述第二ccb文件的成员变量中,将所述成员变量确定为所述第一成员变量;
当所述第一ccb文件中被遍历到的成员变量存在于所述第二ccb文件的成员变量中,确定所述成员变量在所述第一ccb文件中的变量类型与所述成员变量在所述第二ccb文件中的变量类型是否相同,若不不相同则将所述成员变量确定为所述第三成员变量;
第二变量遍历子单元,用于遍历所述第二ccb文件的每个成员变量,查找是否存在于所述第一ccb文件的成员变量中;
当所述第二ccb文件中被遍历到的成员变量没有存在于所述第一ccb文件的成员变量中,将所述成员变量确定为所述第二成员变量;
当所述第二ccb文件中被遍历到的成员变量存在于所述第一ccb文件的成员变量中,确定所述成员变量在所述第一ccb文件中的变量类型与所述成员变量在所述第二ccb文件中的变量类型是否相同,若不相同则将所述成员变量确定为所述第三成员变量。
14.根据权利要求8所述的装置,其特征在于,所述输出单元具体用于:
当查找出所述第一成员变量时,将所述第一成员变量记录成所述检测结果中的第一错误条目;
当查找出所述第二成员变量时,将所述第二成员变量记录成所述检测结果中的第二错误条目;
当查找出所述第三成员变量时,将所述第三成员变量以及所述第三成员变量在所述第一ccb文件中的变量类型和所述第三成员变量在所述第二ccb文件中的变量类型记录成所述检测结果中的第三错误条目;
输出包含所述第一错误条目、所述第二错误条目和所述第三错误条目的所述检测结果。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811011308.0A CN109117376A (zh) | 2018-08-31 | 2018-08-31 | 一种ccb文件的检测方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811011308.0A CN109117376A (zh) | 2018-08-31 | 2018-08-31 | 一种ccb文件的检测方法和装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN109117376A true CN109117376A (zh) | 2019-01-01 |
Family
ID=64861775
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811011308.0A Pending CN109117376A (zh) | 2018-08-31 | 2018-08-31 | 一种ccb文件的检测方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109117376A (zh) |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102253992A (zh) * | 2011-07-06 | 2011-11-23 | 广东威创视讯科技股份有限公司 | 一种基于面向对象的文件差异比较方法及其系统 |
CN105653554A (zh) * | 2014-11-14 | 2016-06-08 | 卓望数码技术(深圳)有限公司 | 一种文件数据比对方法和系统 |
CN106201476A (zh) * | 2016-06-29 | 2016-12-07 | 北京金山安全软件有限公司 | 一种构建哈希映射表的方法、装置及电子设备 |
-
2018
- 2018-08-31 CN CN201811011308.0A patent/CN109117376A/zh active Pending
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102253992A (zh) * | 2011-07-06 | 2011-11-23 | 广东威创视讯科技股份有限公司 | 一种基于面向对象的文件差异比较方法及其系统 |
CN105653554A (zh) * | 2014-11-14 | 2016-06-08 | 卓望数码技术(深圳)有限公司 | 一种文件数据比对方法和系统 |
CN106201476A (zh) * | 2016-06-29 | 2016-12-07 | 北京金山安全软件有限公司 | 一种构建哈希映射表的方法、装置及电子设备 |
Non-Patent Citations (2)
Title |
---|
佚名: "Dom4j解析XML文本,遍历指定节点下的节点内容和属性,并存入List<Map<String,Object>", 《HTTPS://BLOG.CSDN.NET/U013990690/ARTICLE/DETAILS/70242639》 * |
徐劲松: "《计算机网络应用技术》", 31 January 2015 * |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
RU2328032C2 (ru) | Система и способ проверки правильности документов xml и выдачи сообщения о нарушениях схемы | |
US7370270B2 (en) | XML schema evolution | |
US20140075242A1 (en) | Testing rest api applications | |
US7996435B2 (en) | Apparatus and method for comparing computer documents using tree structures | |
CN110109681B (zh) | 不同平台间代码的转换方法及系统 | |
US20160306736A1 (en) | Translation verification testing | |
CN106886509A (zh) | 一种学位论文格式自动检测方法 | |
US8359307B2 (en) | Method and apparatus for building sales tools by mining data from websites | |
CA2701046A1 (en) | Analysis of a system for matching data records | |
CN109614329B (zh) | 一种基于接口控制文件的软件测试用例辅助设计方法 | |
CN104516813B (zh) | 网络页面的测试节点的选取方法和装置 | |
CN113761879B (zh) | 报文格式校验方法、装置以及存储介质 | |
US20090204889A1 (en) | Adaptive sampling of web pages for extraction | |
CN111628975A (zh) | 一种组装xml报文的方法及装置 | |
CN108427580B (zh) | 配置对命名重复的检测方法、存储介质和智能设备 | |
CN101727451B (zh) | 信息提取方法和装置 | |
US10275462B2 (en) | Automatic translation of string collections | |
CN107168866A (zh) | 一种配置文件的参数解析方法及装置 | |
CN113360603A (zh) | 一种合同相似性及合规性检测方法及装置 | |
CN115062206B (zh) | 一种网页元素的搜索方法和电子设备 | |
CN111382051B (zh) | 一种api自动测试方法及测试装置 | |
CN109117376A (zh) | 一种ccb文件的检测方法和装置 | |
CN115238655A (zh) | 一种json数据编辑方法和装置 | |
US11176022B2 (en) | Health diagnostics and analytics for object repositories | |
CN108491324B (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 | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20190101 |
|
RJ01 | Rejection of invention patent application after publication |