專利名稱:Xml解析中數(shù)據(jù)塊劃分方法和xml解析方法
技術(shù)領(lǐng)域:
本發(fā)明涉及計(jì)算機(jī)編程領(lǐng)域,尤其涉及XML解析中數(shù)據(jù)塊劃分方法和XML解析方法。
背景技術(shù):
可擴(kuò)展標(biāo)記語(yǔ)言(Extensible Markup Language, XML)廣泛應(yīng)用在網(wǎng)絡(luò)服務(wù)、數(shù)據(jù)庫(kù)和文件處理等領(lǐng)域。XML具有文檔內(nèi)容和結(jié)構(gòu)完全分離、互操作性強(qiáng)、規(guī)范統(tǒng)一、支持多種編碼和可擴(kuò)展性好等特點(diǎn)。 由于XML文檔可包括多層嵌套的數(shù)據(jù)結(jié)構(gòu),因此XML解析通常會(huì)比較復(fù)雜。在通過(guò)多核處理器環(huán)境中,采用基于多核結(jié)構(gòu)設(shè)計(jì)來(lái)進(jìn)行并行XML解析可以提高XML解析的解析速度。目前,常用的并行XML解析方法中,需要將XML劃分為相同大小的多個(gè)數(shù)據(jù)塊,然后通過(guò)多核處理器的多個(gè)核同時(shí)分別對(duì)多個(gè)數(shù)據(jù)塊進(jìn)行并行的解析處理。但是,發(fā)明人經(jīng)過(guò)研究發(fā)現(xiàn),現(xiàn)有技術(shù)中,將XML劃分為相同大小的多個(gè)數(shù)據(jù)塊的方式會(huì)使得一個(gè)XML元素的內(nèi)容可能分布在兩個(gè)不同的塊中,解析程序只能以推測(cè)的方式解析這樣的數(shù)據(jù)。此外,在并行解析多個(gè)數(shù)據(jù)塊時(shí),需要檢查各個(gè)數(shù)據(jù)塊之間的數(shù)據(jù)依賴關(guān)系,從而導(dǎo)致并行解析線程間的頻繁通信。當(dāng)線程等待通信應(yīng)答時(shí),將暫停運(yùn)行或減緩處理速度,從而使得并行處理的效率受到影響。
發(fā)明內(nèi)容
有鑒于此,本發(fā)明實(shí)施例的目的在于提供XML解析中數(shù)據(jù)塊劃分方法和XML解析方法,以防止在電機(jī)位置傳感器異常時(shí),單純的對(duì)電機(jī)斷電會(huì)給電機(jī)造成較大的損壞的問(wèn)題。為實(shí)現(xiàn)上述目的,本發(fā)明實(shí)施例提供了如下技術(shù)方案一種XML數(shù)據(jù)塊劃分方法,包括確定候選邊界開(kāi)始符階段,包括將XML文件劃分為多個(gè)設(shè)定長(zhǎng)度的XML數(shù)據(jù)段,并將多個(gè)XML數(shù)據(jù)段分配給多個(gè)線程并行處理;在所述XML數(shù)據(jù)段中順序查找特定字符或特定字符串以確定候選邊界開(kāi)始符;所述特定字符包括“<”字符,所述特定字符串包括“</”、“〈?”、“〈!一”或“〈! [CDATA [” ;確定所述候選邊界開(kāi)始符的邊界符類型,記錄所述候選邊界開(kāi)始符的邊界符類型和位置;確定有效邊界開(kāi)始符階段,包括根據(jù)所述候選邊界開(kāi)始符的位置,順序查找所述候選邊界開(kāi)始符;當(dāng)所述候選邊界開(kāi)始符為“〈”或“〈/”時(shí),確定該“〈”或“ </”為有效邊界開(kāi)始符;當(dāng)順序查找的所述候選邊界開(kāi)始符為非“〈/”的字符串時(shí),確定所述字符串為有效邊界開(kāi)始符,并根據(jù)所述有效邊界開(kāi)始符的邊界符類型查找與所述有效邊界開(kāi)始符對(duì)應(yīng)的有效邊界結(jié)束符;將所述有效邊界開(kāi)始符和所述有效邊界結(jié)束符之間的候選邊界開(kāi)始符設(shè)為無(wú)效邊界開(kāi)始符;以所述有效邊界開(kāi)始字符為界,將所述XML數(shù)據(jù)段劃分為多個(gè)數(shù)據(jù)塊。優(yōu)選的,在本發(fā)明實(shí)施例中,所述數(shù)據(jù)塊中包括有多個(gè)所述開(kāi)始邊界字符。此外,在本發(fā)明實(shí)施例中,還提供了一種XML解析方法,包括在確定候選邊界開(kāi)始符階段,包括將XML文件劃分為多個(gè)設(shè)定長(zhǎng)度的XML數(shù)據(jù)段,并將多個(gè)XML數(shù)據(jù)段分配給多個(gè)線程并行處理;在所述XML數(shù)據(jù)段中順序查找特定字符或特定字符串以確定候選邊界開(kāi)始符;所述特定字符包括“<”字符,所述特定字符串包括“</”、“〈?”、“〈!一”或“〈! [CDATA [” ;確定所述候選邊界開(kāi)始符的邊界符類型,記錄所述候選邊界開(kāi)始符的邊界符類型和位置;在確定有效邊界開(kāi)始符階段,包括從整個(gè)XML文件的起始位置開(kāi)始,根據(jù)所述候選邊界開(kāi)始符的位置,順序查找所述候選邊界開(kāi)始符;當(dāng)所述候選邊界開(kāi)始符為“〈”或“〈/”時(shí),確定該“〈”或“〈/”為有效邊界開(kāi)始符;當(dāng)順序查找的所述候選邊界開(kāi)始符為非“〈/”的字符串時(shí),確定所述字符串為有效邊界開(kāi)始符,并根據(jù)所述有效邊界開(kāi)始符的邊界符類型查找與所述有效邊界開(kāi)始符對(duì)應(yīng)的有效邊界結(jié)束符;將所述有效邊界開(kāi)始符和所述有效邊界結(jié)束符之間的候選邊界開(kāi)始符設(shè)為無(wú)效邊界開(kāi)始符;以所述有效邊界開(kāi)始字符為界,將所述XML數(shù)據(jù)段劃分為多個(gè)數(shù)據(jù)塊;在數(shù)據(jù)塊并行解析階段,包括將多個(gè)數(shù)據(jù)塊分配給多個(gè)線程并行處理,以解析各個(gè)數(shù)據(jù)塊。優(yōu)選的,在本發(fā)明實(shí)施例中,還包括當(dāng)在所述數(shù)據(jù)塊沒(méi)有找到匹配的開(kāi)始元素或結(jié)束元素,或者開(kāi)始元素的命名空間不能在此數(shù)據(jù)塊解決時(shí),將所述開(kāi)始元素或結(jié)束元素確定為未解決元素,并將該記錄在預(yù)設(shè)的數(shù)據(jù)結(jié)構(gòu)中。 優(yōu)選的,在本發(fā)明實(shí)施例中,還包括當(dāng)所述未解決元素為多個(gè)時(shí),在解析所述未解決元素前,將多個(gè)未解決元素依次連接為未解決元素鏈。優(yōu)選的,在本發(fā)明實(shí)施例中,還包括在后處理階段,對(duì)所述各數(shù)據(jù)塊的未解決元素按照數(shù)據(jù)塊在XML文件中的順序進(jìn)行檢查和處理;同時(shí)將各數(shù)據(jù)塊產(chǎn)生的子結(jié)果數(shù)據(jù)合并成整體的結(jié)果數(shù)據(jù)。綜上所述,在本發(fā)明實(shí)施例中,通過(guò)本發(fā)明實(shí)施例中的數(shù)據(jù)塊劃分方法,可以使每個(gè)數(shù)據(jù)塊中的XML元素保留完整,從而有效地避免了在后續(xù)的XML數(shù)據(jù)解析過(guò)程中,由于 XML元素不完整而造成的,需要解析程序進(jìn)行推測(cè)的過(guò)程,進(jìn)而也就有效地提高了 XML數(shù)據(jù)的解析效率。
圖1為本發(fā)明實(shí)施例中所述XML數(shù)據(jù)塊的劃分方法的流程示意圖;圖2為本發(fā)明實(shí)施例中查找所述候選邊界開(kāi)始符過(guò)程的流程示意圖;圖3為本發(fā)明實(shí)施例中查找所述有效邊界開(kāi)始符過(guò)程的流程示意圖;圖4為本發(fā)明實(shí)施例中所述XML解析方法的流程示意圖。
具體實(shí)施例方式為使本發(fā)明的目的、技術(shù)方案及優(yōu)點(diǎn)更加清楚明白,以下參照附圖并舉實(shí)施例,對(duì)本發(fā)明作進(jìn)一步詳細(xì)說(shuō)明。 現(xiàn)有技術(shù)中,為了對(duì)XML數(shù)據(jù)進(jìn)行并行處理,將XML數(shù)據(jù)進(jìn)行了劃分,即,將XML數(shù)據(jù)劃分為大小相等的多個(gè)數(shù)據(jù)塊,從而可以將多個(gè)數(shù)據(jù)塊分別通過(guò)不同的處理器進(jìn)行并行處理,以提高解析速度,由于現(xiàn)有技術(shù)中的數(shù)據(jù)塊的劃分方法只是按照數(shù)據(jù)塊的大小來(lái)劃分,所以使得同一 XML元素會(huì)分屬不同的數(shù)據(jù)塊,這樣,在解析過(guò)程中就需要解析程序以推測(cè)的方式來(lái)解析不完整的XML數(shù)據(jù),從而降低了解析效率。為此,本申請(qǐng)?zhí)峁┝艘环NXML數(shù)據(jù)塊的劃分方法,以提高XML數(shù)據(jù)的解析效率,如圖1所示,具體步驟如下在本發(fā)明實(shí)施例中,將XML數(shù)據(jù)塊劃分方法分為了兩個(gè)階段,其中,在確定候選邊界開(kāi)始符階段,包括SI1、將XML文件劃分為多個(gè)設(shè)定長(zhǎng)度的XML數(shù)據(jù)段,并將多個(gè)XML數(shù)據(jù)段分配給多個(gè)線程并行處理;由于XML文件的長(zhǎng)度有可能會(huì)很大,所以,為了充分利用計(jì)算機(jī)的并行運(yùn)算能力,本申請(qǐng)中,在解析XML文件時(shí),首先將XML文件劃分為多個(gè)設(shè)定長(zhǎng)度的XML數(shù)據(jù)段,并將多個(gè)XML數(shù)據(jù)段分配給多個(gè)線程并行處理;這樣,可以提高后續(xù)的工作效率。S12、在XML數(shù)據(jù)段中順序查找特定字符或特定字符串以確定候選邊界開(kāi)始符;所述特定字符包括“<”字符,所述特定字符串包括“</”、“〈?”、“〈!一”或“〈! [CDATA [” ;本發(fā)明實(shí)施例中的核心思想為,在將XML數(shù)據(jù)段劃分為多個(gè)數(shù)據(jù)塊時(shí),要以邊界開(kāi)始符為界,而且還要保證該作為劃分界的邊界開(kāi)始符為有效的邊界開(kāi)始符。由于本發(fā)明實(shí)施例中劃分出的數(shù)據(jù)塊盡量包括了完整的XML元素,所以減少了在并行解析多個(gè)數(shù)據(jù)塊時(shí),并行解析線程間的頻繁通信;從而提高了解析效率。為了能夠準(zhǔn)確的識(shí)別有效的邊界開(kāi)始符,首先將可能為有效邊界開(kāi)始符的邊界開(kāi)始符確定為候選邊界開(kāi)始符。順序識(shí)別XML數(shù)據(jù)段中的字符是否為候選邊界開(kāi)始符的過(guò)程,可以如圖2所示,包括順序查找每個(gè)XML數(shù)據(jù)段內(nèi)的“〈”字符;在查找到一個(gè)“〈”,判斷是否其緊跟“/”或者“?”或者“ ! ”字符;如果緊跟“ ! ”字符,則進(jìn)一步判斷是否緊跟“一”或緊跟“ [CDATA[”。將符合以上規(guī)則的所有字符或字符串確定為候選邊界開(kāi)始符。也就是說(shuō),候選邊界開(kāi)始符所包括的字符或字符串具體包括候選開(kāi)始元素開(kāi)始符“〈”、候選結(jié)束元素開(kāi)始符“〈/”、候選處理命令開(kāi)始符“〈?”、候選評(píng)論開(kāi)始符“〈!一”或候選數(shù)據(jù)段開(kāi)始符“〈! [CDATA[”;為此,通過(guò)順序識(shí)別XML數(shù)據(jù)段中的字符是否為以上的字符或字符串,即可確定XML數(shù)據(jù)段中的候選邊界開(kāi)始符。
S13、確定候選邊界開(kāi)始符的邊界符類型,記錄候選邊界開(kāi)始符的邊界符類型和位置;在確定了候選邊界開(kāi)始符后,還需要確定候選邊界開(kāi)始符的邊界符類型,邊界符的類型一般包括開(kāi)始元素邊界符,結(jié)束元素邊界符,處理命令邊界符,評(píng)論邊界符,以及數(shù)據(jù)段邊界符。邊界符包括邊界開(kāi)始符和邊界結(jié)束符兩種,即在表明某個(gè)XML元素開(kāi)始的位置使用邊界開(kāi)始符,表明某個(gè)XML元素結(jié)束的位置使用邊界結(jié)束符;如,處理命令邊界符包括處理命令開(kāi)始符“〈?”和處理命令的結(jié)束符“?〉”。在確定了候選邊界開(kāi)始符的邊界符類型后,還需要記錄候選邊界開(kāi)始符的邊界符類型和位置。在記錄候選邊界開(kāi)始符的邊界符類型和位置后,就進(jìn)入了確定有效邊界開(kāi)始符階 段,確定有效邊界開(kāi)始符階段為一個(gè)嚴(yán)格順序的非并行的過(guò)程,具體包括S14、從整個(gè)XML文件的起始位置開(kāi)始,根據(jù)候選邊界開(kāi)始符的位置,順序查找候選邊界開(kāi)始符;當(dāng)候選邊界開(kāi)始符為“〈”或“〈/”時(shí),確定該“〈”或“〈/”為有效邊界開(kāi)始符;當(dāng)順序查找的所述候選邊界開(kāi)始符為非“〈/”的字符串時(shí),確定所述字符串為有效邊界開(kāi)始符,并根據(jù)所述有效邊界開(kāi)始符的邊界符類型查找與所述有效邊界開(kāi)始符對(duì)應(yīng)的;將所述有效邊界開(kāi)始符和所述有效邊界結(jié)束符之間的候選邊界開(kāi)始符設(shè)為無(wú)效邊界開(kāi)始符;由于在上一步驟記錄了候選邊界開(kāi)始符的位置,所以通過(guò)候選邊界開(kāi)始符的位置,可以在多個(gè)候選邊界開(kāi)始符中確定有效邊界開(kāi)始符。通過(guò)順序查找候選邊界開(kāi)始符來(lái)確定有效邊界開(kāi)始符的過(guò)程,如圖3所示,包括當(dāng)查找到的字符為“〈”,或字符串為“〈/”,可以直接將其確定為有效邊界開(kāi)始符,除了這兩種情況以外,當(dāng)查找到其他的候選邊界開(kāi)始符時(shí),在將其確定為有效邊界開(kāi)始符后,還需要查找與該有效邊界開(kāi)始符對(duì)應(yīng)的有效邊界結(jié)束符,并將有效邊界開(kāi)始符對(duì)應(yīng)的有效邊界結(jié)束符之間的其他候選邊界開(kāi)始符設(shè)為無(wú)效邊界開(kāi)始符。從而可以去除無(wú)效邊界開(kāi)始符,使保證邊界開(kāi)始符的選定正確性。具體的,如果識(shí)別到一個(gè)字符“〈”,將其識(shí)別為有效的開(kāi)始元素開(kāi)始符;如果識(shí)別到一個(gè)字符串“〈/”,將其識(shí)別為“〈/”,將其識(shí)別為一個(gè)有效的結(jié)束元素開(kāi)始符;如果識(shí)別到一個(gè)“〈?”,則將其識(shí)別為一個(gè)有效的處理命令開(kāi)始符。并從對(duì)應(yīng)XML數(shù)據(jù)流中位置開(kāi)始,查找第一個(gè)出現(xiàn)的“?〉”,則此“?〉”為處理命令結(jié)束符。根據(jù)此處理命令開(kāi)始和結(jié)束位置,順序檢查開(kāi)始和結(jié)束位置之間是否包含其它候選邊界符,如果有,將其標(biāo)記為無(wú)效邊界開(kāi)始符;這是因?yàn)椋幚砻畹拈_(kāi)始符“〈?”和結(jié)束符“?〉”之間不允許出現(xiàn)結(jié)束符“?〉”,但允許其它候選邊界開(kāi)始符出現(xiàn),因此在開(kāi)始符“〈?”和結(jié)束符“?〉”之間是有可能出現(xiàn)其他的候選邊界開(kāi)始符的,比如,一段XML數(shù)據(jù)包括以下字符〈?····〈.....〈?· · · . <!—.....—>. . . . <! [CDATA[. . . ]]>..... >,該段中只有第一個(gè)〈?是有效的邊界符,而且整段數(shù)據(jù)只是一個(gè)處理命令,其中包含的“〈!一……一>”,“〈! [CDATA[...]]>”不被識(shí)別為評(píng)論和數(shù)據(jù)段,其中,第2個(gè)〈?不是處理命令開(kāi)始符,都只是處理命令的內(nèi)容而已。如果識(shí)別到一個(gè)“〈!一”,則將其識(shí)別為一個(gè)有效的評(píng)論開(kāi)始符。并從對(duì)應(yīng)XML數(shù)據(jù)流中位置開(kāi)始,查找第一個(gè)出現(xiàn)的“一>”,則此“一>”為評(píng)論的結(jié)束符。根據(jù)此評(píng)論的開(kāi)始和結(jié)束位置,順序檢查開(kāi)始和結(jié)束位置之間是否包含其它候選邊界開(kāi)始符,如果有,將其標(biāo)記為無(wú)效邊界開(kāi)始符;同上類似,評(píng)論有嚴(yán)格定義,處理命令的開(kāi)始符“〈! 一”和結(jié)束符“一>”之間不允許出現(xiàn)結(jié)束符“一>”,但允許其它候選邊界開(kāi)始符,一段XML數(shù)據(jù)包括以下字符〈!一····〈........ .〈?.....?>····〈! [CDATA[...]]>.....—>,該段中只有第一個(gè)“〈![CDATA[”是有效的邊界符,而且整段數(shù)據(jù)只是一個(gè)評(píng)論,其中包含的“〈 . . . >”,“〈! [CDATA[…]]>”將不被識(shí)別為處理命令和數(shù)據(jù)段,進(jìn)而也就不會(huì)被識(shí)別為有效邊界開(kāi)始符,都只是評(píng)論的內(nèi)容而已。如果識(shí)別到一個(gè)“〈![CDATA[”,則將其識(shí)別為一個(gè)有效的數(shù)據(jù)段開(kāi)始符并從對(duì)應(yīng)XML數(shù)據(jù)流中位置開(kāi)始,查找第一個(gè)出現(xiàn)的“]]>”,則此“]]>”為該數(shù)據(jù)段的結(jié)束符。根據(jù)此數(shù)據(jù)段的開(kāi)始和結(jié)束位置,順序檢查開(kāi)始和結(jié)束位置之間是否包含其它候選邊界符,如果有,將其標(biāo)記為無(wú)效邊界開(kāi)始符。同上類似,數(shù)據(jù)段命令有嚴(yán)格定義,數(shù)據(jù)段的開(kāi)始符“〈! [CDATA[”和結(jié)束符“]]>”之間不允許出現(xiàn)結(jié)束符“]] >”,但允許其它候選邊界開(kāi)始符,一段XML數(shù)據(jù)包括以下字符<! [CDATA[...〈?· · · ·〈.....< .... >...〈!一.....一>· . . . <! [CDATA[...]]>,該段中只有第一個(gè)“〈![CDATA[”是有效的邊界符,而且整段數(shù)據(jù)只是一個(gè)數(shù)據(jù)段,
其中包含的“〈!一.....->”,“〈?…?〉”不被識(shí)別為評(píng)論和處理命令,第2個(gè)“〈! [CDATA[”
不是數(shù)據(jù)段開(kāi)始符,都只是數(shù)據(jù)段的內(nèi)容而已。S15、以所述有效邊界開(kāi)始字符為界,將所述XML數(shù)據(jù)段劃分為多個(gè)數(shù)據(jù)塊在確定了有效邊界開(kāi)始字符后,即可以有效邊界開(kāi)始字符為界,將XML數(shù)據(jù)段劃分為多個(gè)數(shù)據(jù)塊,從而可以將多個(gè)數(shù)據(jù)塊分別通過(guò)多個(gè)處理器進(jìn)行并行處理。由于通過(guò)本發(fā)明實(shí)施例中的數(shù)據(jù)塊劃分方法,可以使每個(gè)數(shù)據(jù)塊中的XML元素保留完整,從而有效地避免了在后續(xù)的XML數(shù)據(jù)解析過(guò)程中,由于XML元素不完整而造成的,需要解析程序進(jìn)行推測(cè)的過(guò)程,進(jìn)而也就有效地提高了 XML數(shù)據(jù)的解析效率。優(yōu)選的,在本發(fā)明實(shí)施例中,為了避免單獨(dú)XML時(shí)間元素構(gòu)成的數(shù)據(jù)塊過(guò)小,從而造成頻繁的為處理器分配數(shù)據(jù)塊,在本發(fā)明實(shí)施例中,每個(gè)數(shù)據(jù)塊中還可以包括有多個(gè)開(kāi)始邊界字符。在本發(fā)明的另一方面,還提供了一種XML解析方法,如圖4所示在包括了上述實(shí)施例中所述數(shù)據(jù)塊劃分方法之外,還包括步驟在數(shù)據(jù)塊并行解析階段S16、將多個(gè)數(shù)據(jù)塊分配給多個(gè)線程并行處理,以解析各個(gè)數(shù)據(jù)塊。在圖1所對(duì)應(yīng)的實(shí)施例中,通過(guò)實(shí)施例中提供的是在XML數(shù)據(jù)解析時(shí)的數(shù)據(jù)塊劃分方法,在將XML數(shù)據(jù)進(jìn)行數(shù)據(jù)塊劃分完成后,進(jìn)一步的,還需要將各個(gè)數(shù)據(jù)塊分別通過(guò)不同的處理器進(jìn)行并行的解析處理,由于在本發(fā)明實(shí)施例中,每個(gè)數(shù)據(jù)塊中的XML元素得以完整的保留,從而有效地避免了在后續(xù)的XML數(shù)據(jù)解析過(guò)程中,由于XML元素不完整而造成的,需要解析程序進(jìn)行推測(cè)的過(guò)程,進(jìn)而也就有效地提高了 XML數(shù)據(jù)的解析效率。
優(yōu)選的,在本發(fā)明實(shí)施例中,還包括當(dāng)在所述數(shù)據(jù)塊沒(méi)有找到匹配的開(kāi)始元素或結(jié)束元素,或者開(kāi)始元素的命名空間不能在此數(shù)據(jù)塊解決時(shí),將所述開(kāi)始元素或結(jié)束元素確定為未解決元素,并將該記錄在預(yù)設(shè)的數(shù)據(jù)結(jié)構(gòu)中,并將多個(gè)未解決元素依次連接為未解決元素鏈,使得后處理時(shí),可以有效地減少搜索時(shí)間,從而進(jìn)一步的提高解析效率。此外,本發(fā)明實(shí)施例中,還可以包括后處理階段,具體可以包括步驟S17、對(duì)各數(shù)據(jù)塊的未解決元素按照數(shù)據(jù)塊在XML文件中的順序進(jìn)行檢查和處理;同時(shí)將各數(shù)據(jù)塊產(chǎn)生的子結(jié)果數(shù)據(jù)合并成整體的結(jié)果數(shù)據(jù)。以上所述僅是本發(fā)明的優(yōu)選實(shí)施方式,應(yīng)當(dāng)指出,對(duì)于本技術(shù)領(lǐng)域的普通技術(shù)人員來(lái)說(shuō),在不脫離本發(fā)明原理的前提下,還可以做出若干改進(jìn)和潤(rùn)飾,這些改進(jìn)和潤(rùn)飾也應(yīng)視為本發(fā)明的保護(hù)范圍。
權(quán)利要求
1.一種XML數(shù)據(jù)塊劃分方法,其特征在于,包括 確定候選邊界開(kāi)始符階段,包括 將XML文件劃分為多個(gè)設(shè)定長(zhǎng)度的XML數(shù)據(jù)段,并將多個(gè)XML數(shù)據(jù)段分配給多個(gè)線程并行處理; 在所述XML數(shù)據(jù)段中順序查找特定字符或特定字符串以確定候選邊界開(kāi)始符;所述特定字符包括“ < ”字符,所述特定字符串包括“ </”、“〈? ”、“〈!一”或“〈! [CDATA [ ” ; 確定所述候選邊界開(kāi)始符的邊界符類型,記錄所述候選邊界開(kāi)始符的邊界符類型和位置; 確定有效邊界開(kāi)始符階段,包括 從整個(gè)XML文件的起始位置開(kāi)始,根據(jù)所述候選邊界開(kāi)始符的位置,順序查找所述候選邊界開(kāi)始符;當(dāng)所述候選邊界開(kāi)始符為“〈”或“〈/”時(shí),確定該“〈”或“〈/”為有效邊界開(kāi)始符; 當(dāng)順序查找的所述候選邊界開(kāi)始符為非“〈/”的字符串時(shí),確定所述字符串為有效邊界開(kāi)始符,并根據(jù)所述有效邊界開(kāi)始符的邊界符類型查找與所述有效邊界開(kāi)始符對(duì)應(yīng)的有效邊界結(jié)束符;將所述有效邊界開(kāi)始符和所述有效邊界結(jié)束符之間的候選邊界開(kāi)始符設(shè)為無(wú)效邊界開(kāi)始符; 以所述有效邊界開(kāi)始字符為界,將所述XML數(shù)據(jù)段劃分為多個(gè)數(shù)據(jù)塊。
2.根據(jù)權(quán)利要求1所述的數(shù)據(jù)塊劃分方法,其特征在于,所述數(shù)據(jù)塊中包括有多個(gè)所述開(kāi)始邊界字符。
3.—種XML解析方法,包括如權(quán)利要求1中所述數(shù)據(jù)塊劃分方法,其特征在于,在將XML數(shù)據(jù)劃分為多個(gè)數(shù)據(jù)塊后,包括 在數(shù)據(jù)塊并行解析階段 將多個(gè)數(shù)據(jù)塊分配給多個(gè)線程并行處理,以解析各個(gè)數(shù)據(jù)塊。
4.根據(jù)權(quán)利要求3所述的解析方法,其特征在于,還包括 當(dāng)在所述數(shù)據(jù)塊沒(méi)有找到匹配的開(kāi)始元素或結(jié)束元素,或者開(kāi)始元素的命名空間不能在此數(shù)據(jù)塊解決時(shí),將所述開(kāi)始元素或結(jié)束元素確定為未解決元素,并將該記錄在預(yù)設(shè)的數(shù)據(jù)結(jié)構(gòu)中。
5.根據(jù)權(quán)利要求4所述的解析方法,其特征在于,還包括 當(dāng)所述未解決元素為多個(gè)時(shí), 在解析所述未解決元素前,將多個(gè)未解決元素依次連接為未解決元素鏈。
6.根據(jù)權(quán)利要求5所述的數(shù)據(jù)塊劃分方法,其特征在于,還包括 在后處理階段,對(duì)所述各數(shù)據(jù)塊的未解決元素按照數(shù)據(jù)塊在XML文件中的順序進(jìn)行檢查和處理;同時(shí)將各數(shù)據(jù)塊產(chǎn)生的子結(jié)果數(shù)據(jù)合并成整體的結(jié)果數(shù)據(jù)。
全文摘要
本實(shí)施例公開(kāi)了XML解析中數(shù)據(jù)塊劃分方法和XML解析方法,其中,XML解析中數(shù)據(jù)塊劃分方法,包括將XML文件劃分為XML數(shù)據(jù)段,并分配給多個(gè)線程并行處理;在XML數(shù)據(jù)段中確定候選邊界開(kāi)始符;候選邊界開(kāi)始符的邊界符類型,記錄候選邊界開(kāi)始符的邊界符類型和位置;確定有效邊界開(kāi)始符;以所述有效邊界開(kāi)始字符為界,將所述XML數(shù)據(jù)段劃分為多個(gè)數(shù)據(jù)塊。通過(guò)本發(fā)明實(shí)施例中的數(shù)據(jù)塊劃分方法,可以使每個(gè)數(shù)據(jù)塊中的XML元素保留完整,從而有效地避免了在后續(xù)的XML數(shù)據(jù)解析過(guò)程中,由于XML元素不完整而造成的,需要解析程序進(jìn)行推測(cè)的過(guò)程,進(jìn)而也就有效地提高了XML數(shù)據(jù)的解析效率。
文檔編號(hào)G06F17/30GK103020176SQ20121049596
公開(kāi)日2013年4月3日 申請(qǐng)日期2012年11月28日 優(yōu)先權(quán)日2012年11月28日
發(fā)明者方躍堅(jiān) 申請(qǐng)人:方躍堅(jiān)