Xml解析中数据块划分方法和xml解析方法

文档序号:6382544阅读:172来源:国知局
专利名称:Xml解析中数据块划分方法和xml解析方法
技术领域
本发明涉及计算机编程领域,尤其涉及XML解析中数据块划分方法和XML解析方法。
背景技术
可扩展标记语言(Extensible Markup Language, XML)广泛应用在网络服务、数据库和文件处理等领域。XML具有文档内容和结构完全分离、互操作性强、规范统一、支持多种编码和可扩展性好等特点。 由于XML文档可包括多层嵌套的数据结构,因此XML解析通常会比较复杂。在通过多核处理器环境中,采用基于多核结构设计来进行并行XML解析可以提高XML解析的解析速度。目前,常用的并行XML解析方法中,需要将XML划分为相同大小的多个数据块,然后通过多核处理器的多个核同时分别对多个数据块进行并行的解析处理。但是,发明人经过研究发现,现有技术中,将XML划分为相同大小的多个数据块的方式会使得一个XML元素的内容可能分布在两个不同的块中,解析程序只能以推测的方式解析这样的数据。此外,在并行解析多个数据块时,需要检查各个数据块之间的数据依赖关系,从而导致并行解析线程间的频繁通信。当线程等待通信应答时,将暂停运行或减缓处理速度,从而使得并行处理的效率受到影响。

发明内容
有鉴于此,本发明实施例的目的在于提供XML解析中数据块划分方法和XML解析方法,以防止在电机位置传感器异常时,单纯的对电机断电会给电机造成较大的损坏的问题。为实现上述目的,本发明实施例提供了如下技术方案一种XML数据块划分方法,包括确定候选边界开始符阶段,包括将XML文件划分为多个设定长度的XML数据段,并将多个XML数据段分配给多个线程并行处理;在所述XML数据段中顺序查找特定字符或特定字符串以确定候选边界开始符;所述特定字符包括“<”字符,所述特定字符串包括“</”、“〈?”、“〈!一”或“〈! [CDATA [” ;确定所述候选边界开始符的边界符类型,记录所述候选边界开始符的边界符类型和位置;确定有效边界开始符阶段,包括根据所述候选边界开始符的位置,顺序查找所述候选边界开始符;当所述候选边界开始符为“〈”或“〈/”时,确定该“〈”或“ </”为有效边界开始符;当顺序查找的所述候选边界开始符为非“〈/”的字符串时,确定所述字符串为有效边界开始符,并根据所述有效边界开始符的边界符类型查找与所述有效边界开始符对应的有效边界结束符;将所述有效边界开始符和所述有效边界结束符之间的候选边界开始符设为无效边界开始符;以所述有效边界开始字符为界,将所述XML数据段划分为多个数据块。优选的,在本发明实施例中,所述数据块中包括有多个所述开始边界字符。此外,在本发明实施例中,还提供了一种XML解析方法,包括在确定候选边界开始符阶段,包括将XML文件划分为多个设定长度的XML数据段,并将多个XML数据段分配给多个线程并行处理;在所述XML数据段中顺序查找特定字符或特定字符串以确定候选边界开始符;所述特定字符包括“<”字符,所述特定字符串包括“</”、“〈?”、“〈!一”或“〈! [CDATA [” ;确定所述候选边界开始符的边界符类型,记录所述候选边界开始符的边界符类型和位置;在确定有效边界开始符阶段,包括从整个XML文件的起始位置开始,根据所述候选边界开始符的位置,顺序查找所述候选边界开始符;当所述候选边界开始符为“〈”或“〈/”时,确定该“〈”或“〈/”为有效边界开始符;当顺序查找的所述候选边界开始符为非“〈/”的字符串时,确定所述字符串为有效边界开始符,并根据所述有效边界开始符的边界符类型查找与所述有效边界开始符对应的有效边界结束符;将所述有效边界开始符和所述有效边界结束符之间的候选边界开始符设为无效边界开始符;以所述有效边界开始字符为界,将所述XML数据段划分为多个数据块;在数据块并行解析阶段,包括将多个数据块分配给多个线程并行处理,以解析各个数据块。优选的,在本发明实施例中,还包括当在所述数据块没有找到匹配的开始元素或结束元素,或者开始元素的命名空间不能在此数据块解决时,将所述开始元素或结束元素确定为未解决元素,并将该记录在预设的数据结构中。 优选的,在本发明实施例中,还包括当所述未解决元素为多个时,在解析所述未解决元素前,将多个未解决元素依次连接为未解决元素链。优选的,在本发明实施例中,还包括在后处理阶段,对所述各数据块的未解决元素按照数据块在XML文件中的顺序进行检查和处理;同时将各数据块产生的子结果数据合并成整体的结果数据。综上所述,在本发明实施例中,通过本发明实施例中的数据块划分方法,可以使每个数据块中的XML元素保留完整,从而有效地避免了在后续的XML数据解析过程中,由于 XML元素不完整而造成的,需要解析程序进行推测的过程,进而也就有效地提高了 XML数据的解析效率。


图1为本发明实施例中所述XML数据块的划分方法的流程示意图;图2为本发明实施例中查找所述候选边界开始符过程的流程示意图;图3为本发明实施例中查找所述有效边界开始符过程的流程示意图;图4为本发明实施例中所述XML解析方法的流程示意图。
具体实施例方式为使本发明的目的、技术方案及优点更加清楚明白,以下参照附图并举实施例,对本发明作进一步详细说明。 现有技术中,为了对XML数据进行并行处理,将XML数据进行了划分,即,将XML数据划分为大小相等的多个数据块,从而可以将多个数据块分别通过不同的处理器进行并行处理,以提高解析速度,由于现有技术中的数据块的划分方法只是按照数据块的大小来划分,所以使得同一 XML元素会分属不同的数据块,这样,在解析过程中就需要解析程序以推测的方式来解析不完整的XML数据,从而降低了解析效率。为此,本申请提供了一种XML数据块的划分方法,以提高XML数据的解析效率,如图1所示,具体步骤如下在本发明实施例中,将XML数据块划分方法分为了两个阶段,其中,在确定候选边界开始符阶段,包括SI1、将XML文件划分为多个设定长度的XML数据段,并将多个XML数据段分配给多个线程并行处理;由于XML文件的长度有可能会很大,所以,为了充分利用计算机的并行运算能力,本申请中,在解析XML文件时,首先将XML文件划分为多个设定长度的XML数据段,并将多个XML数据段分配给多个线程并行处理;这样,可以提高后续的工作效率。S12、在XML数据段中顺序查找特定字符或特定字符串以确定候选边界开始符;所述特定字符包括“<”字符,所述特定字符串包括“</”、“〈?”、“〈!一”或“〈! [CDATA [” ;本发明实施例中的核心思想为,在将XML数据段划分为多个数据块时,要以边界开始符为界,而且还要保证该作为划分界的边界开始符为有效的边界开始符。由于本发明实施例中划分出的数据块尽量包括了完整的XML元素,所以减少了在并行解析多个数据块时,并行解析线程间的频繁通信;从而提高了解析效率。为了能够准确的识别有效的边界开始符,首先将可能为有效边界开始符的边界开始符确定为候选边界开始符。顺序识别XML数据段中的字符是否为候选边界开始符的过程,可以如图2所示,包括顺序查找每个XML数据段内的“〈”字符;在查找到一个“〈”,判断是否其紧跟“/”或者“?”或者“ ! ”字符;如果紧跟“ ! ”字符,则进一步判断是否紧跟“一”或紧跟“ [CDATA[”。将符合以上规则的所有字符或字符串确定为候选边界开始符。也就是说,候选边界开始符所包括的字符或字符串具体包括候选开始元素开始符“〈”、候选结束元素开始符“〈/”、候选处理命令开始符“〈?”、候选评论开始符“〈!一”或候选数据段开始符“〈! [CDATA[”;为此,通过顺序识别XML数据段中的字符是否为以上的字符或字符串,即可确定XML数据段中的候选边界开始符。
S13、确定候选边界开始符的边界符类型,记录候选边界开始符的边界符类型和位置;在确定了候选边界开始符后,还需要确定候选边界开始符的边界符类型,边界符的类型一般包括开始元素边界符,结束元素边界符,处理命令边界符,评论边界符,以及数据段边界符。边界符包括边界开始符和边界结束符两种,即在表明某个XML元素开始的位置使用边界开始符,表明某个XML元素结束的位置使用边界结束符;如,处理命令边界符包括处理命令开始符“〈?”和处理命令的结束符“?〉”。在确定了候选边界开始符的边界符类型后,还需要记录候选边界开始符的边界符类型和位置。在记录候选边界开始符的边界符类型和位置后,就进入了确定有效边界开始符阶 段,确定有效边界开始符阶段为一个严格顺序的非并行的过程,具体包括S14、从整个XML文件的起始位置开始,根据候选边界开始符的位置,顺序查找候选边界开始符;当候选边界开始符为“〈”或“〈/”时,确定该“〈”或“〈/”为有效边界开始符;当顺序查找的所述候选边界开始符为非“〈/”的字符串时,确定所述字符串为有效边界开始符,并根据所述有效边界开始符的边界符类型查找与所述有效边界开始符对应的;将所述有效边界开始符和所述有效边界结束符之间的候选边界开始符设为无效边界开始符;由于在上一步骤记录了候选边界开始符的位置,所以通过候选边界开始符的位置,可以在多个候选边界开始符中确定有效边界开始符。通过顺序查找候选边界开始符来确定有效边界开始符的过程,如图3所示,包括当查找到的字符为“〈”,或字符串为“〈/”,可以直接将其确定为有效边界开始符,除了这两种情况以外,当查找到其他的候选边界开始符时,在将其确定为有效边界开始符后,还需要查找与该有效边界开始符对应的有效边界结束符,并将有效边界开始符对应的有效边界结束符之间的其他候选边界开始符设为无效边界开始符。从而可以去除无效边界开始符,使保证边界开始符的选定正确性。具体的,如果识别到一个字符“〈”,将其识别为有效的开始元素开始符;如果识别到一个字符串“〈/”,将其识别为“〈/”,将其识别为一个有效的结束元素开始符;如果识别到一个“〈?”,则将其识别为一个有效的处理命令开始符。并从对应XML数据流中位置开始,查找第一个出现的“?〉”,则此“?〉”为处理命令结束符。根据此处理命令开始和结束位置,顺序检查开始和结束位置之间是否包含其它候选边界符,如果有,将其标记为无效边界开始符;这是因为,处理命令的开始符“〈?”和结束符“?〉”之间不允许出现结束符“?〉”,但允许其它候选边界开始符出现,因此在开始符“〈?”和结束符“?〉”之间是有可能出现其他的候选边界开始符的,比如,一段XML数据包括以下字符〈?····〈.....〈?· · · . <!—.....—>. . . . <! [CDATA[. . . ]]>..... >,该段中只有第一个〈?是有效的边界符,而且整段数据只是一个处理命令,其中包含的“〈!一……一>”,“〈! [CDATA[...]]>”不被识别为评论和数据段,其中,第2个〈?不是处理命令开始符,都只是处理命令的内容而已。如果识别到一个“〈!一”,则将其识别为一个有效的评论开始符。并从对应XML数据流中位置开始,查找第一个出现的“一>”,则此“一>”为评论的结束符。根据此评论的开始和结束位置,顺序检查开始和结束位置之间是否包含其它候选边界开始符,如果有,将其标记为无效边界开始符;同上类似,评论有严格定义,处理命令的开始符“〈! 一”和结束符“一>”之间不允许出现结束符“一>”,但允许其它候选边界开始符,一段XML数据包括以下字符〈!一····〈........ .〈?.....?>····〈! [CDATA[...]]>.....—>,该段中只有第一个“〈![CDATA[”是有效的边界符,而且整段数据只是一个评论,其中包含的“〈 . . . >”,“〈! [CDATA[…]]>”将不被识别为处理命令和数据段,进而也就不会被识别为有效边界开始符,都只是评论的内容而已。如果识别到一个“〈![CDATA[”,则将其识别为一个有效的数据段开始符并从对应XML数据流中位置开始,查找第一个出现的“]]>”,则此“]]>”为该数据段的结束符。根据此数据段的开始和结束位置,顺序检查开始和结束位置之间是否包含其它候选边界符,如果有,将其标记为无效边界开始符。同上类似,数据段命令有严格定义,数据段的开始符“〈! [CDATA[”和结束符“]]>”之间不允许出现结束符“]] >”,但允许其它候选边界开始符,一段XML数据包括以下字符<! [CDATA[...〈?· · · ·〈.....< .... >...〈!一.....一>· . . . <! [CDATA[...]]>,该段中只有第一个“〈![CDATA[”是有效的边界符,而且整段数据只是一个数据段,
其中包含的“〈!一.....->”,“〈?…?〉”不被识别为评论和处理命令,第2个“〈! [CDATA[”
不是数据段开始符,都只是数据段的内容而已。S15、以所述有效边界开始字符为界,将所述XML数据段划分为多个数据块在确定了有效边界开始字符后,即可以有效边界开始字符为界,将XML数据段划分为多个数据块,从而可以将多个数据块分别通过多个处理器进行并行处理。由于通过本发明实施例中的数据块划分方法,可以使每个数据块中的XML元素保留完整,从而有效地避免了在后续的XML数据解析过程中,由于XML元素不完整而造成的,需要解析程序进行推测的过程,进而也就有效地提高了 XML数据的解析效率。优选的,在本发明实施例中,为了避免单独XML时间元素构成的数据块过小,从而造成频繁的为处理器分配数据块,在本发明实施例中,每个数据块中还可以包括有多个开始边界字符。在本发明的另一方面,还提供了一种XML解析方法,如图4所示在包括了上述实施例中所述数据块划分方法之外,还包括步骤在数据块并行解析阶段S16、将多个数据块分配给多个线程并行处理,以解析各个数据块。在图1所对应的实施例中,通过实施例中提供的是在XML数据解析时的数据块划分方法,在将XML数据进行数据块划分完成后,进一步的,还需要将各个数据块分别通过不同的处理器进行并行的解析处理,由于在本发明实施例中,每个数据块中的XML元素得以完整的保留,从而有效地避免了在后续的XML数据解析过程中,由于XML元素不完整而造成的,需要解析程序进行推测的过程,进而也就有效地提高了 XML数据的解析效率。
优选的,在本发明实施例中,还包括当在所述数据块没有找到匹配的开始元素或结束元素,或者开始元素的命名空间不能在此数据块解决时,将所述开始元素或结束元素确定为未解决元素,并将该记录在预设的数据结构中,并将多个未解决元素依次连接为未解决元素链,使得后处理时,可以有效地减少搜索时间,从而进一步的提高解析效率。此外,本发明实施例中,还可以包括后处理阶段,具体可以包括步骤S17、对各数据块的未解决元素按照数据块在XML文件中的顺序进行检查和处理;同时将各数据块产生的子结果数据合并成整体的结果数据。以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。
权利要求
1.一种XML数据块划分方法,其特征在于,包括 确定候选边界开始符阶段,包括 将XML文件划分为多个设定长度的XML数据段,并将多个XML数据段分配给多个线程并行处理; 在所述XML数据段中顺序查找特定字符或特定字符串以确定候选边界开始符;所述特定字符包括“ < ”字符,所述特定字符串包括“ </”、“〈? ”、“〈!一”或“〈! [CDATA [ ” ; 确定所述候选边界开始符的边界符类型,记录所述候选边界开始符的边界符类型和位置; 确定有效边界开始符阶段,包括 从整个XML文件的起始位置开始,根据所述候选边界开始符的位置,顺序查找所述候选边界开始符;当所述候选边界开始符为“〈”或“〈/”时,确定该“〈”或“〈/”为有效边界开始符; 当顺序查找的所述候选边界开始符为非“〈/”的字符串时,确定所述字符串为有效边界开始符,并根据所述有效边界开始符的边界符类型查找与所述有效边界开始符对应的有效边界结束符;将所述有效边界开始符和所述有效边界结束符之间的候选边界开始符设为无效边界开始符; 以所述有效边界开始字符为界,将所述XML数据段划分为多个数据块。
2.根据权利要求1所述的数据块划分方法,其特征在于,所述数据块中包括有多个所述开始边界字符。
3.—种XML解析方法,包括如权利要求1中所述数据块划分方法,其特征在于,在将XML数据划分为多个数据块后,包括 在数据块并行解析阶段 将多个数据块分配给多个线程并行处理,以解析各个数据块。
4.根据权利要求3所述的解析方法,其特征在于,还包括 当在所述数据块没有找到匹配的开始元素或结束元素,或者开始元素的命名空间不能在此数据块解决时,将所述开始元素或结束元素确定为未解决元素,并将该记录在预设的数据结构中。
5.根据权利要求4所述的解析方法,其特征在于,还包括 当所述未解决元素为多个时, 在解析所述未解决元素前,将多个未解决元素依次连接为未解决元素链。
6.根据权利要求5所述的数据块划分方法,其特征在于,还包括 在后处理阶段,对所述各数据块的未解决元素按照数据块在XML文件中的顺序进行检查和处理;同时将各数据块产生的子结果数据合并成整体的结果数据。
全文摘要
本实施例公开了XML解析中数据块划分方法和XML解析方法,其中,XML解析中数据块划分方法,包括将XML文件划分为XML数据段,并分配给多个线程并行处理;在XML数据段中确定候选边界开始符;候选边界开始符的边界符类型,记录候选边界开始符的边界符类型和位置;确定有效边界开始符;以所述有效边界开始字符为界,将所述XML数据段划分为多个数据块。通过本发明实施例中的数据块划分方法,可以使每个数据块中的XML元素保留完整,从而有效地避免了在后续的XML数据解析过程中,由于XML元素不完整而造成的,需要解析程序进行推测的过程,进而也就有效地提高了XML数据的解析效率。
文档编号G06F17/30GK103020176SQ20121049596
公开日2013年4月3日 申请日期2012年11月28日 优先权日2012年11月28日
发明者方跃坚 申请人:方跃坚
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1