发明内容
有鉴于此,本发明的主要目的在于提供一种信息文档的处理方法,加快XML文档返回处理结果的速度,提高计算机软件的执行效率。
本发明的再一目的在于提供一种信息文档的处理装置,可加快XML文档返回处理结果的速度,提高计算机软件的执行效率。
为达到上述目的,本发明的技术方案是这样实现的:
一种信息文档的处理方法,该方法包括:
A、将可扩展标记语言XML文档标签信息映射到可由下标访问的XML文档向量模型中;
B、依据滞后处理策略信息,通过下标访问并处理所述XML文档向量模型的结构元素,其中对于需要滞后处理的信息暂不处理,记录该滞后处理信息的下标;
C、根据步骤B中记录的需要滞后处理信息的下标,访问并处理所述XML文档向量模型中对应的结构元素。
在一种优选实施例中,所述步骤A中,将所述XML文档中的每一个标签所包含的信息对应映射到XML文档向量模型的一个结构元素中,其中一个标签映射的结构元素包含有以下内容信息:
1)当前标签在XML文档中的顺序编号;
2)当前标签到包含此标签的父标签顺序编号的距离;
3)当前标签包含的子标签个数;
4)当前标签的标签名;
5)当前标签的属性信息;
6)当前标签包含的起始文本内容;
7)当前标签包含的结束文本内容。
在一种优选实施例中,所述步骤A以基于事件驱动分析处理的方式进行处理,具体包括以下事件驱动处理过程:
起始文档事件驱动处理:建立或清理一个可以通过下标访问的数据结构作为所述XML文档向量模型,初始化当前处理标签下标;
起始标签事件驱动处理:构建一个新标签的结构元素,并对该新结构元素的顺序编号、该新标签到父标签顺序编号的距离、该新结构元素的标签名称以及属性进行赋值,并将该新建的结构元素加入到可用下标访问的数据结构中,变更当前处理下标为当前结构元素的顺序编号;
内容处理事件驱动处理:判断当前遇到的内容是起始内容还是结束内容,如是起始内容,将对当前元素结构的起始内容赋值,否则对当前元素结构的结束内容赋值;
结束标签事件驱动处理:对当前处理结构元素的包含子元素数赋值,并将当前处理结构元素的父元素下标赋给当前处理标签下标。
在一种优选实施例中,所述步骤B具体包括:
B1、将所述XML文档向量模型的第一个结构元素作为当前结构元素,构建该结构元素对应的处理上下文作为当前处理上下文;
B2、在当前处理上下文中进行当前结构元素起始阶段的处理;
B3、在当前处理上下文中进行当前结构元素起始内容的处理,并为当前子结构元素下标赋值;
B4、判断当前子结构元素下标是否在当前结构元素的子结构元素范围内,如果是则进入到步骤B9,否则进入到步骤B5;
B5、在当前处理上下文中进行当前结构元素对应的结束内容的处理;
B6、在当前处理上下文中进行当前结构元素对应的结束阶段的处理;
B7、判断当前结构元素是否为根结构元素,如果是则结束本流程,否则进入步骤B8;
B8、将当前子结构元素下标设为当前结构元素的兄弟结构元素下标,并返回到当前结构元素的父结构元素的处理上下文中,进入步骤B4;
B9、依据预设的处理策略信息,判断当前子结构元素是否可以滞后处理,如果是则进入步骤B10,否则进入步骤B11;
B10、记录当前子结构元素下标的值,之后将当前子结构元素下标改为下一子结构元素位置,进入步骤B4;
B11、将当前处理上下文进行相应的处理,将当前子结构元素作为当前处理结构元素,并构建当前处理结构元素对应的处理上下文作为当前处理上下文,返回步骤B2。
在一种优选实施例中,步骤B中所述的滞后处理策略信息包括:判断当前处理的信息是否为后继处理过程中的必须项,如果不是必须项,且不是同等级信息中的首项,则可滞后处理。
在一种优选实施例中,所述步骤C中,针对每个所记录的滞后处理信息,分别执行如下步骤:
C1、将所记录的滞后处理信息的下标作为当前子结构元素下标,将该子结构元素对应父结构的处理上下文作为当前处理上下文;
C2、将当前的子结构元素下标作为当前结构元素下标,并构建该结构元素对应的处理上下文作为当前处理上下文;
C3、在当前处理上下文中进行当前结构元素起始阶段的处理;
C4、在当前处理上下文中进行当前结构元素起始内容的处理,并为当前子结构元素下标赋值;
C5、判断当前子结构元素下标是否在当前结构元素的子结构元素范围内,如果是则进入到步骤C2,否则进入到步骤C6;
C6、在当前处理上下文中进行当前结构元素对应的结束内容的处理;
C7、在当前处理上下文中进行当前结构元素对应的结束阶段的处理;
C8、判断当前结构元素下标是否为步骤C1所述的滞后处理信息的下标;如果是则结束本流程。否则进入步骤C9;
C9、将当前子结构元素下标设为当前结构元素的兄弟结构元素下标,并返回到当前结构元素的父结构元素的处理上下文中,返回步骤C5。
在一种优选实施例中,所述步骤B中,对于可滞后处理的信息,进一步记录该滞后处理信息的父结构的处理上下文信息,并在步骤C中直接利用所记录的上下文信息处理对应的结构元素。
一种信息文档的处理装置,该装置包括:
第一模块,用于将可扩展标记语言XML文档标签信息映射到可由下标访问的XML文档向量模型中;
第二模块,用于依据滞后处理策略信息,通过下标访问并处理所述XML文档向量模型的结构元素,其中对于需要滞后处理的信息暂不处理,记录该滞后处理信息的下标;
第三模块,用于根据第二模块中记录的需要滞后处理信息的下标,访问并处理所述XML文档向量模型中对应的结构元素。
在一种优选实施例中,所述第一模块具体包括以下事件驱动处理模块:
起始文档事件驱动处理模块,用于建立或清理一个可以通过下标访问的数据结构作为所述XML文档向量模型,初始化当前处理标签下标;
起始标签事件驱动处理模块,用于构建一个新标签的结构元素,并对该新结构元素的顺序编号、该新标签到父标签顺序编号的距离、该新结构元素的标签名称以及属性进行赋值,并将该新建的结构元素加入到可用下标访问的数据结构中,变更当前处理下标为当前结构元素的顺序编号;
内容处理事件驱动处理模块,用于判断当前遇到的内容是起始内容还是结束内容,如是起始内容,将对当前元素结构的起始内容赋值,否则对当前元素结构的结束内容赋值;
结束标签事件驱动处理模块,用于对当前处理结构元素的包含子元素数赋值,并将当前处理结构元素的父元素下标赋给当前处理标签下标。
在一种优选实施例中,所述第二模块具体包括以下子模块:
第B1子模块,用于将所述XML文档向量模型的第一个结构元素作为当前结构元素,构建该结构元素对应的处理上下文作为当前处理上下文;
第B2子模块,用于在当前处理上下文中进行当前结构元素起始阶段的处理;
第B3子模块,用于在当前处理上下文中进行当前结构元素起始内容的处理,并为当前子结构元素下标赋值;
第B4子模块,用于判断当前子结构元素下标是否在当前结构元素的子结构元素范围内,如果是则进入到第B9子模块,否则进入到第B5子模块;
第B5子模块,用于在当前处理上下文中进行当前结构元素对应的结束内容的处理;
第B6子模块,用于在当前处理上下文中进行当前结构元素对应的结束阶段的处理;
第B7子模块,用于判断当前结构元素是否为根结构元素,如果是则结束本流程,否则进入第B8子模块;
第B8子模块,用于将当前子结构元素下标设为当前结构元素的兄弟结构元素的下标,并返回到当前结构元素的父结构元素的处理上下文中,进入第B4子模块;
第B9子模块,用于依据预设的处理策略信息,判断当前子结构元素是否可以滞后处理,如果是则进入第B10子模块,否则进入第B11子模块;
第B10子模块,用于记录当前子结构元素下标的值,之后将当前子结构元素下标改为下一子结构元素位置,进入第B4子模块;
第B11子模块,用于将当前处理上下文进行相应的处理,将当前子结构元素作为当前处理结构元素,并构建当前处理结构元素对应的处理上下文作为当前处理上下文,返回第B2子模块。
在一种优选实施例中,所述第三模块具体包括以下子模块:
第C1子模块,用于将所记录的某滞后处理信息的下标作为当前子结构元素下标,将该子结构元素对应父结构的处理上下文作为当前处理上下文;
第C2子模块,用于将当前的子结构元素下标作为当前结构元素下标,并构建该结构元素对应的处理上下文作为当前处理上下文;
第C3子模块,用于在当前处理上下文中进行当前结构元素起始阶段的处理;
第C4子模块,用于在当前处理上下文中进行当前结构元素起始内容的处理,并为当前子结构元素下标赋值;
第C5子模块,用于判断当前子结构元素下标是否在当前结构元素的子结构元素范围内,如果是则进入到第C2子模块,否则进入到第C6子模块;
第C6子模块,用于在当前处理上下文中进行当前结构元素对应的结束内容的处理;
第C7子模块,用于在当前处理上下文中进行当前结构元素对应的结束阶段的处理;
第C8子模块,判断当前结构元素下标是否为第C1子模块所处理的滞后处理信息的下标;如果是则结束本流程。否则进入第C9子模块;
第C9子模块,用于将当前子结构元素下标设为当前结构元素的兄弟结构元素下标,并返回到当前结构元素的父结构元素的处理上下文中,返回第C5子模块。
由于本发明首先将XML文档的信息全部映射到可用下标访问的XML文档向量模型中,对该XML文档向量模型的访问可以不必是流线形、一个接一个元素地访问方式,而是可以随机移动访问其中所有的结构元素,因此本发明将可以先处理必要的结构元素并返回处理结果,对需要滞后处理的结构元素随后分批处理并分批返回处理结果,从而可以加快XML文档返回处理结果的速度,提高软件的执行效率,减少用户等待XML文档处理结果的时间。
具体实施方式
下面通过具体实施例和附图对本发明做进一步详细说明。
图1为本发明所述方法的核心处理流程,该流程包括:
步骤101即第一阶段、将XML文档标签信息映射到可由下标访问的XML文档向量模型中;
步骤102即第二阶段、依据滞后处理策略信息,通过下标访问并处理所述XML文档向量模型的结构元素,其中对于需要滞后处理的信息暂不处理,记录该滞后处理信息的下标;
步骤103即第三阶段、根据上一步骤中记录的需要滞后处理信息的下标,访问并处理所述XML文档向量模型中对应的结构元素。
在所述步骤101中,将所述XML文档中的每一个标签所包含的信息对应映射到XML文档向量模型的一个结构元素中,其中一个标签映射的结构元素包含有以下内容信息:
1)当前标签在XML文档中的顺序编号;
2)当前标签到包含此标签的父标签顺序编号的距离;
3)当前标签包含的子标签个数;
4)当前标签的标签名;
5)当前标签的属性信息;
6)当前标签包含的起始文本内容;
7)当前标签包含的结束文本内容。
下表1为一个标签对应的结构元素的内容示例:
表1
另外一个标签的内容还可以包括一个标识符bool m_bBegin,以便表示当前处理是标签是否为标签起始过程。
所述步骤101以基于事件驱动分析处理的方式进行处理,例如在一种优选实施例中可以基于针对XML的简单API接口(SAX,Simple API for XML)事件驱动模式进行事件驱动处理,在此SAX事件驱动模式中,实现的事件处理器先不直接处理返回结果,而是将XML文档内容处理成XML文档向量模型。
步骤101中,具体包括图2a~图2d所示的事件驱动处理过程。
图2a为起始文档事件驱动处理的流程图,参见图2a的步骤211~步骤212,该流程包括:建立或清理一个可以通过下标访问的数据结构作为所述XML文档向量模型,初始化当前处理标签下标变量。
图2b为起始标签事件驱动处理的流程图,参见图2b的步骤221~步骤226,该流程包括:构建一个新结构元素的结构元素,并对该新结构元素的顺序编号、该新标签到父标签顺序编号的距离、该新结构元素的标签名称以及属性进行赋值,并将该新建的结构元素加入到可用下标访问的数据结构中,变更当前处理下标为当前结构元素的顺序编号。
图2c为内容处理事件驱动处理的流程图,参见图2c的步骤231~步骤233,该流程包括:判断当前遇到的内容是起始内容还是结束内容,如是起始内容,将对当前元素结构的起始内容赋值,否则对当前元素结构的结束内容赋值。
图2d为结束标签事件驱动处理的流程图,参见图2d的步骤241~步骤242,该流程包括:对当前处理结构元素的包含子元素数赋值,并将当前处理结构元素的父元素下标赋给当前处理标签下标。
通过构建这样一个XML文档向量模型,就可以将XML文档信息记录到上述的一个数据结构中,从而可以随机的通过下标来访问标签的信息,而且根据结构元素当中的信息也可以将文档进行随机的分割。在步骤102和步骤103中通过一个下标对应到所述文档向量模型中的每一个结构元素,以此得到文档中的每一个标签的内容信息。
通过上述步骤101的处理,XML文档的全部内容都已记录到XML文档向量模型的数据结构中,因此本发明在步骤102和步骤103中,对于XML文档的处理都将变为对于所述XML文档向量模型的处理。在步骤102和步骤103中,对于XML文档的每一个标签内容的访问就变成了通过下标在XML文档向量模型中访问其中的结构元素。
在步骤102即第二阶段中,将处理步骤101的XML文档向量模型,并将其中大部分信息根据当前文档采取相应滞后处理策略暂不处理,记录滞后处理信息的下标标识,还可以进一步记录该滞后处理信息对应的父结构的处理上下文信息,以在步骤103中即第三阶段直接利用所记录的上下文信息处理对应的结构元素。
图3为本发明一种实施例中所述第二阶段即步骤102的详细处理流程图。假设在该实施例中,已经构建了一个包含n个结构元素的XML文档向量模型为vector[n],c为当前处理的结构元素下标,s为当前子结构元素下标。参见图3,该流程具体包括:
步骤31、将所述XML文档向量模型的第一个结构元素作为当前结构元素,构建该结构元素对应的处理上下文作为当前处理上下文,在这里将c赋值为0。
步骤32、在当前处理上下文中进行当前结构元素起始阶段的处理;这里可以包括对当前结构元素的属性信息(vector[c]->mp_attributelist)的处理,及其它相关的处理。
步骤33、在当前处理上下文中进行当前结构元素起始内容的处理,并为当前子结构元素下标赋值,即对vector[c]->m_beginContent信息的处理,并将s赋值为c+1。
步骤34、判断当前子结构元素下标是否在当前结构元素的子结构元素范围内,即s是否大于等于c+1且小于等于c+vector[c]->m_count,如果是则进入到步骤39,否则进入到步骤35。
步骤35、在当前处理上下文中进行当前结构元素对应的结束内容的处理操作,即处理vector[c]->m_endContent信息。
步骤36、在当前处理上下文中进行当前结构元素对应的结束阶段的处理,通常是根据需要进行一些清理及其它相关的操作。
步骤37、判断当前结构元素是否为根结构元素,即c是否为0,如果是则结束本流程,返回处理结果给用户,否则进入步骤38。
步骤38、将当前子结构元素下标设为当前结构元素的兄弟结构元素下标,即s=c+vector[c]->m_count+1,并返回到当前结构元素的父结构元素的处理上下文中,即c=c-vector[c]->m_distance,之后进入步骤34;
步骤39、依据预设的处理策略信息,判断当前子结构元素是否可以滞后处理,如果是则进入步骤310,否则进入步骤311;
此处,所述的滞后处理策略信息包括:判断当前处理的信息是否为后继处理过程中的必须项(也就是说后继处理过程中不依赖当前需滞后处理的信息),如果不是必须项,且不是同等级信息中的首项(也就是说当前处理的标签的父标签已有相关相类同的标签被处理),则可滞后处理。此处举例说明该滞后处理策略,如在一个开放文档格式(ODF,Open Document Format)的电子表格中,对于多个表内容所对应的结构元素,第一个表内容可以先进行处理;而对于第二个/第三个.....表内容对应的结构元素可以将其设为滞后处理内容。当然,在另外的实施例中,所述滞后处理策略信息也可以不按上述信息设置,而是可以根据具体文档情况来设置。
步骤310、记录当前子结构元素下标的值,同时可以记录该子结构元素的父结构的处理上下文,以备第三阶段进行处理,之后将当前子结构元素下标改为下一子结构元素位置,即s=s+vector[s]->m_count+1,进入步骤34。在另一种实施例中,本步骤也可以只记录当前子结构元素下标的值,在后续第三阶段的处理中根据该子结构元素下标构建出其父结构的处理上下文。
步骤311、将当前处理上下文进行相应的处理,以备当前子结构元素处理完后(步骤38)使用,然后将当前子结构元素作为当前处理结构元素,即c=s,并构建当前处理结构元素对应的处理上下文作为当前处理上下文,进入步骤32。
通过上述步骤102即第二阶段,可以在处理XML文档的过程中只处理一部分内容就先返回结果信息给使用者,从而减少用户为获得结果信息而等待的时间。然后在后续的步骤103即第三阶段中,用户浏览或使用已经获得的结果信息时,应用程序再分批次的将未处理完的内容处理提供给用户。
在步骤103即第三阶段中具体处理上述需滞后处理的信息。在上述第二阶段的步骤310中已经保留了需滞后处理的子结构元素下标及其父结构的处理上下文,因此在第三阶段需要再对那些已保留下的未处理的内容进行处理。
在第三阶段中即步骤103中,可以分别针对所记录的每个滞后处理信息的下标进行处理,图4为所述第三阶段中针对所记录的某个滞后处理信息的下标进行处理的详细处理流程图。在第三阶段,可以按照所记录的滞后处理信息的下标的编号顺序分别执行图4流程进行处理,也可以不按编号顺序,而是按照指定的策略顺序分别执行图4流程。参见图4,针对所记录的每个子结构元素下标,分别执行如下步骤:
步骤41、将该子结构元素下标作为当前子结构元素下标,将所记录的该子结构元素对应父结构的处理上下文作为当前处理上下文。
如果在步骤310中只记录了子结构元素下标而没有记录其父结构的处理上下文,则在步骤41中进一步构造出该子结构元素的父结构的处理上下文,将该处理上下文作为当前处理上下文。
步骤42、将当前子结构元素下标作为当前处理结构元素下标,即c=s,并构建该结构元素对应的处理上下文,将该处理上下文作为当前处理上下文。
步骤43、在当前处理上下文中进行当前结构元素起始阶段的处理。此处可以包括对当前结构元素的属性信息(vector[c]->mp_attributelist)的处理,及其它相关的处理。
步骤44、在当前处理上下文中进行当前结构元素起始内容的处理,并为当前子结构元素下标赋值;即对vector[c]->m_beginContent信息进行处理,并将s赋值为c+1。
步骤45、判断当前子结构元素下标是否在当前结构元素的子结构元素范围内,即s大于等于c+1且小于等于c+vector[c]->m_count,如果是则进入到步骤42,否则进入到步骤46。
步骤46、在当前处理上下文中进行当前结构元素对应的结束内容的处理,即vector[c]->m_endContent信息的处理。
步骤47、在当前处理上下文中进行当前结构元素对应的结束阶段的处理,通常是根据需要进行一些清理及其它相关的操作。
步骤48、判断当前结构元素下标是否为步骤41所述的滞后处理子结构元素下标;如果是则结束本流程。否则进入步骤49。
步骤49、将当前子结构元素下标设为当前结构元素的兄弟结构元素下标,即s=c+vector[c]->m_count+1;并返回到当前结构元素的父结构元素的处理上下文中,即c=c-vector[c]->m_distance;之后进入步骤45。
下面通过一个示例XML文档的处理过程,对本发明所述各个阶段的过程进行进一步详细的描述。该XML文档如下:
<A name=″a″>
<B name=″b1″>BeginContent1<C name=″c1″/>EndContent1</B>
<B name=″b2″>BeginContent2<C name=″c2″/>EndContent2</B>
<B name=″b3″>BeginContent3<C name=″c3″/>EndContent3</B>
<B name=″b4″>BeginContent4<C name=″c4″/>EndContent4</B>
<B name=″b5″>BeginContent5<C name=″c5″/>EndContent5</B>
<B name=″b6″>BeginContent6<C name=″c6″/>EndContent6</B>
</A>
图5为现有SAX事件驱动处理上述XML文档实例的示意图。参见图5,在处理这样一个XML文档时,在现有的SAX事件驱动过程中其处理流程必须通过一个个标签间的连续跳转才行,是一种流线形事件驱动处理,为一个不掉的阻塞式处理过程。这样在处理过程中,面对着多个重复的标签,如果对于标签<B>的处理时间很长,这样整个文档的处理过程将会非常漫长。但现阶段的处理无法跳过每一个过程。
然而利用本发明的方法,在处理上述这样一个XML文档(如文字处理)时,可以先行只处理第一段的内容,就可以将结果较快的显示给用户,而当用户在阅读已显示内容时,程序可以分批处理并逐步返回结果给用户。具体的过程如下。
首先,在第一阶段,通过SAX的事件驱动过程解析得到一个如图6所示的可由下标访问的数据结构,即XML文档向量模型。如图2a~图2d所示,每个事件驱动的具体过程表述如下:
对所述XML文档进行SAX事件驱动分析过程,最初驱动起始文档事件:建立或清理一个可以通过下标访问的数据结构,初始化当前处理标签下标变量,例如初始化下标变量为0。
接着遇到起始标签<A name=″a″>,驱动起始标签事件,包括:构建一个新标签的结构元素,并对该新建对象(即当前新建的这个结构元素)的顺序编号m_local赋值为0,对该新建对象的到父标签距离m_distance赋值为0,对该新建对象的标签名称m_name赋值为A,属性mp_attributelist赋值为name=″a″,并将该新建结构元素加入到可用下标访问的数据结构中,如图6中的m_local为0的那一行;变更当前处理下标为当前对象的顺序编号m_local的值0。
接着遇到起始标签<B name=″b1″>,此时驱动起始标签事件,包括:构建一个新标签的结构元素,并对该新建对象的顺序编号赋值为1,对该新建对象的到父标签距离赋值为1,对该新建对象的标签名称赋值为B,属性赋值为name=″b1″,将新建结构元素加入到可下标访问的数据结构中,如图6中的m_local为1的那一行;变更当前处理下标为当前对象的顺序编号的值1。
接着向下进行驱动分析,遇到内容BeginContent1,驱动内容处理事件,包括:判断当前遇到的内容是起始内容还是结束内容,此时是起始内容,将当前结构元素的起始内容赋值,即下标为1的结构元素的起始内容赋值为BeginContent1。
接下来遇到起始标签<C name=″c1″,驱动起始标签事件,包括:构建一个新标签的结构元素,并对该新建对象的顺序编号赋值为2,对该新建对象的到父标签距离赋值为1,对该新建对象的标签名称赋值为C,属性赋值为name=″c1″,将该新建结构元素加入到可下标访问的数据结构中;变更当前处理下标为当前对象的顺序编号的值2。
接下来遇到结束标签/>,驱动结束标签事件,包括:对当前处理结构元素(下标值为2)的包含子元素数m_count赋值为0,并将当前处理结构元素的父元素下标1赋给当前处理标签下标。
接下来遇到内容EndContent1,驱动内容处理事件,包括:判断当前遇到的内容是起始内容还是结束内容,此时是结束内容,将当前处理结构元素的结束内容赋值,即下标为1结构元素的结束内容赋值为EndContent1。
接下来遇到结束标签</B>,驱动结束标签事件,包括:对当前处理结构元素(下标值为1)的包含子元素数m_count赋值为1,并将当前处理结构元素的父元素下标0赋给当前处理标签下标。
接下来遇到起始标签<B name=″b2″>,驱动起始标签事件,包括:构建一个新标签的结构元素,并对该新建对象的顺序编号赋值为3,对该新建对象的到父标签距离赋值为3,对该新建对象的标签名称赋值为B,属性赋值为name=″b2″,将该新建的结构元素加入到可下标访问的数据结构中;变更当前处理下标为当前对象的顺序编号的值3。
接下来遇到内容BeginContent2,驱动内容处理事件,包括:判断当前遇到的内容是起始内容还是结束内容,此时是起始内容,将当前处理结构元素的起始内容赋值,即下标为3的结构元素的起始内容赋值为BeginContent2。
接下来按照与上述流程类似的方式进行处理,直到SAX事件驱动分析处理过程结束,得到如图6所示的完整的XML文档向量模型。
然后,进入第二阶段的处理。按照如图3所示的流程,从下标为0的结构元素开始处理所述XML文档向量模型,处理过程的一种示意图如图7所示。此处,可以看到对于下标为1、3、5、7、9、11的结构元素是同一类标签(即标签<B>)元素,他们之间是平等的关系,在处理过程中不产生相互依赖的关系;因此,本实例中的滞后处理策略就是,当完成对于下标1的结构元素及其子结构元素(即下标2的结构元素)的处理就可以返回给用户一个相对较完整的信息(虽然是部分,但也是一个较完整的结果),其他下标3、5、7、9、11的结构元素及其子元素可以滞后处理。因此,在第二阶段的处理过程中仅处理下标为0、1、2的三个结构元素,就先返回结果,并记录下标为3、5、7、9、11的结构元素的下标,同时也可记录下标0的结构元素的处理上下文,以备第三阶段处理使用。通过第二阶段的处理,用户不必等到所有的内容都处理完才能看到第一个结果,有效地缩短了返回处理结果的等待时间,可以提高程序与用户的交互效率。
最后,进入第三阶段的处理。按照如图4所示的流程,从第二阶段所记录下标为0的结构元素的处理上下文和所记录的结构元素的下标3开始,处理所述XML文档向量模型,处理过程的一种示意图如图8所示。例如处理下标为3的子结构元素的具体过程如图4所示具体为:
在步骤41中将该子结构元素下标3作为当前子结构元素下标变量s,将所记录的该子结构元素对应父结构(下标为0)的处理上下文作为当前处理上下文。
在步骤42中将当前子结构元素下标作为当前处理结构元素下标,即c=s=3,并构建该结构元素下标3对应的处理上下文,将该处理上下文作为当前处理上下文。
在步骤43中,在当前处理上下文中进行当前结构元素(下标为3)起始阶段的处理。在步骤44中,在当前处理上下文中进行当前结构元素(下标为3)起始内容的处理,并为当前子结构元素下标赋值即s=c+1=4。
进入步骤45,判断当前子结构元素下标是否在当前结构元素的子结构元素范围内,此时s=4,大于等于c+1=4且小于等于c+vector[c]->m_count=4,进入到步骤42,将当前子结构元素下标作为当前处理结构元素下标,即c=s=4,并构建该结构元素下标4对应的处理上下文,将该处理上下文作为当前处理上下文。接着在步骤43中,在当前处理上下文中进行当前结构元素(下标为4)起始阶段的处理。在步骤44中,在当前处理上下文中进行当前结构元素(下标为4)起始内容的处理,并为当前子结构元素下标赋值即s=c+1=5。
再次进入步骤45,此时s=5,大于等于c+1=5,但大于c+vector[c]->m_count=4,所以进入到步骤46。在步骤46中,在当前处理上下文中进行当前结构元素(下标为4)对应的结束内容的处理。在步骤47中,在当前处理上下文中进行当前结构元素(下标为4)对应的结束阶段的处理。
进入步骤48、判断当前结构元素下标(下标为4)不是步骤41所述的滞后处理子结构元素下标(下标为3),所以进入步骤49。在步骤49中、将当前子结构元素下标设为当前结构元素的兄弟结构元素下标,即s=c+vector[c]->m_count+1=5;并返回到当前结构元素的父结构元素的处理上下文中,即c=c-vector[c]->m_distance=3。
之后再次进入步骤45,此时s=5,大于等于c+1=4,但大于c+vector[c]->m_count=4,所以进入到步骤46。在步骤46中,在当前处理上下文中进行当前结构元素(下标为3)对应的结束内容的处理。在步骤47中,在当前处理上下文中进行当前结构元素(下标为3)对应的结束阶段的处理。
进入步骤48、判断当前结构元素下标(下标为3)是步骤41所述的滞后处理子结构元素下标(下标为3),所以结束本流程。
依照上述流程,可以依次处理下标3的结构元素及其子结构元素(即下标4的结构元素)、下标5的结构元素及其子结构元素(即下标6的结构元素)、下标7的结构元素及其子结构元素(即下标8的结构元素)、下标9的结构元素及其子结构元素(即下标10的结构元素)、下标11的结构元素及其子结构元素(即下标12的结构元素),也可以不按照所记录的下标顺序,而是根据需要分别处理所记录下标的结构元素。利用第三阶段的处理,可以在用户查看第二阶段的处理结果的同时,随机分批处理所述的滞后处理信息,并逐步返回处理结果给用户。
以上所述,仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。