本發(fā)明涉及計(jì)算機(jī)技術(shù)領(lǐng)域,具體涉及一種xml文檔的解析方法及解析裝置。
背景技術(shù):
隨著web開發(fā)的日益流行,數(shù)據(jù)交互也越發(fā)的重要。無論是前端和后端之間的交互,還是客戶端和服務(wù)器之間的交互,異或是不同服務(wù)器之間的交互都體現(xiàn)了數(shù)據(jù)的交互。
而網(wǎng)絡(luò)的本質(zhì)就是一個(gè)數(shù)據(jù)之間互相傳遞、互相修改、互相影響的拓?fù)浣Y(jié)構(gòu)。為了解決數(shù)據(jù)之間的傳遞問題,國(guó)際之間漸漸形成了兩種規(guī)范:一種是基于特殊符號(hào)的傳遞方式,如json(javascriptobjectnotation,一種輕量級(jí)的數(shù)據(jù)交換格式);另一種是基于一定格式的傳遞方式,如xml(extensiblemarkuplanguage,擴(kuò)展標(biāo)記語言)。json現(xiàn)在依然只是在web端比較流行,而xml卻一直占據(jù)巨大的數(shù)據(jù)交互的份額。
此外,map接口在編程過程中是需要經(jīng)常用到的,其儲(chǔ)存了成對(duì)的鍵-值對(duì)象,提供key(鍵)到value(值)的映射),能夠?qū)崿F(xiàn)根據(jù)key快速查找value。
但是,目前卻沒有提供xml與map之間的轉(zhuǎn)換方法,于是需要程序員自己根據(jù)當(dāng)前的業(yè)務(wù)報(bào)文來書寫轉(zhuǎn)換方法,但是較低的使用范圍和重復(fù)利用率,成為了數(shù)據(jù)交互這上面的一個(gè)比較尷尬的問題。
需要說明的是,在上述背景技術(shù)部分公開的信息僅用于加強(qiáng)對(duì)本發(fā)明的背景的理解,因此可以包括不構(gòu)成對(duì)本領(lǐng)域普通技術(shù)人員已知的現(xiàn)有技術(shù)的信息。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明的目的在于提供一種xml文檔的解析方案,進(jìn)而至少在一定程度上克服由于相關(guān)技術(shù)的限制和缺陷而導(dǎo)致的一個(gè)或者多個(gè)問題。
本發(fā)明的其他特性和優(yōu)點(diǎn)將通過下面的詳細(xì)描述變得顯然,或部分地通過本發(fā)明的實(shí)踐而習(xí)得。
根據(jù)本發(fā)明的一個(gè)方面,提供了一種xml文檔的解析方法,包括以下步驟:獲取待解析的xml文檔,并獲取一指定節(jié)點(diǎn)的信息;解析所述xml文檔,得到所述xml文檔中的所有節(jié)點(diǎn);在所述所有節(jié)點(diǎn)中匹配所述指定節(jié)點(diǎn),并獲取所述指定節(jié)點(diǎn)的相關(guān)數(shù)據(jù);根據(jù)所述指定節(jié)點(diǎn)的相關(guān)數(shù)據(jù)生成對(duì)應(yīng)的map接口。
在本發(fā)明的一些實(shí)施例中,基于前述方案,解析所述xml文檔,得到所述xml文檔中的所有節(jié)點(diǎn)的步驟,包括:解析所述xml文檔,得到所述xml文檔中的根節(jié)點(diǎn);基于所述根節(jié)點(diǎn),循環(huán)獲取所述xml文檔中的所有節(jié)點(diǎn)。
在本發(fā)明的一些實(shí)施例中,基于前述方案,還包括:根據(jù)所述xml文檔中的所有節(jié)點(diǎn),生成所述xml文檔的節(jié)點(diǎn)列表;在所述所有節(jié)點(diǎn)中匹配所述指定節(jié)點(diǎn)的步驟,包括:在所述節(jié)點(diǎn)列表中匹配所述指定節(jié)點(diǎn)。
在本發(fā)明的一些實(shí)施例中,基于前述方案,所述指定節(jié)點(diǎn)的相關(guān)數(shù)據(jù)包括:所述指定節(jié)點(diǎn)的名稱和所述指定節(jié)點(diǎn)的內(nèi)容。
在本發(fā)明的一些實(shí)施例中,基于前述方案,根據(jù)所述指定節(jié)點(diǎn)的相關(guān)數(shù)據(jù)生成對(duì)應(yīng)的map接口的步驟,包括:將所述指定節(jié)點(diǎn)的名稱作為所述map接口的key,并將所述指定節(jié)點(diǎn)的內(nèi)容作為所述map接口的value,以生成所述map接口。
在本發(fā)明的一些實(shí)施例中,基于前述方案,通過dom4j工具解析所述xml文檔,得到所述xml文檔中的所有節(jié)點(diǎn)。
根據(jù)本發(fā)明的另一方面,還提供了一種xml文檔的解析裝置,包括:第一獲取單元,用于獲取待解析的xml文檔,并獲取一指定節(jié)點(diǎn)的信息;解析單元,用于解析所述xml文檔,得到所述xml文檔中的所有節(jié)點(diǎn);第二獲取單元,用于在所述所有節(jié)點(diǎn)中匹配所述指定節(jié)點(diǎn),并獲取所述指定節(jié)點(diǎn)的相關(guān)數(shù)據(jù);生成單元,用于根據(jù)所述指定節(jié)點(diǎn)的相關(guān)數(shù)據(jù)生成對(duì)應(yīng)的map接口。
在本發(fā)明的一些實(shí)施例中,基于前述方案,所述解析單元配置為:解析所述xml文檔,得到所述xml文檔中的根節(jié)點(diǎn);基于所述根節(jié)點(diǎn),循環(huán)獲取所述xml文檔中的所有節(jié)點(diǎn)。
在本發(fā)明的一些實(shí)施例中,基于前述方案,所述解析單元還配置為:根據(jù)所述xml文檔中的所有節(jié)點(diǎn),生成所述xml文檔的節(jié)點(diǎn)列表;所述第二獲取單元配置為:在所述節(jié)點(diǎn)列表中匹配所述指定節(jié)點(diǎn)。
在本發(fā)明的一些實(shí)施例中,基于前述方案,所述指定節(jié)點(diǎn)的相關(guān)數(shù)據(jù)包括:所述指定節(jié)點(diǎn)的名稱和所述指定節(jié)點(diǎn)的內(nèi)容。
在本發(fā)明的一些實(shí)施例中,基于前述方案,所述生成單元配置為:將所述指定節(jié)點(diǎn)的名稱作為所述map接口的key,并將所述指定節(jié)點(diǎn)的內(nèi)容作為所述map接口的value,以生成所述map接口。
在本發(fā)明的一些實(shí)施例所提供的技術(shù)方案中,通過提供xml文檔與map接口之間的轉(zhuǎn)換方案,使得在需要獲取某個(gè)節(jié)點(diǎn)的屬性時(shí),能夠基于轉(zhuǎn)換得到的map接口,直接根據(jù)節(jié)點(diǎn)的名稱來查找節(jié)點(diǎn)的內(nèi)容,快速地實(shí)現(xiàn)了數(shù)據(jù)的獲取過程,進(jìn)而使得編程人員無需關(guān)心如何進(jìn)行數(shù)據(jù)轉(zhuǎn)化,減輕了編程人員的代碼開發(fā)壓力,有利于提高產(chǎn)品的開發(fā)效率。
附圖說明
圖1示意性示出了根據(jù)本發(fā)明的第一個(gè)實(shí)施例的xml文檔的解析方法的流程圖;
圖2示意性示出了根據(jù)本發(fā)明的實(shí)施例的xml文檔轉(zhuǎn)換為map的流程圖;
圖3示意性示出了根據(jù)本發(fā)明的第二個(gè)實(shí)施例的xml文檔的解析方法的流程圖;
圖4示意性示出了根據(jù)本發(fā)明的實(shí)施例的xml文檔的解析裝置的框圖。
具體實(shí)施方式
現(xiàn)在將參考附圖更全面地描述示例實(shí)施方式。然而,示例實(shí)施方式能夠以多種形式實(shí)施,且不應(yīng)被理解為限于在此闡述的范例;相反,提供這些實(shí)施方式使得本發(fā)明將更加全面和完整,并將示例實(shí)施方式的構(gòu)思全面地傳達(dá)給本領(lǐng)域的技術(shù)人員。
此外,所描述的特征、結(jié)構(gòu)或特性可以以任何合適的方式結(jié)合在一個(gè)或更多實(shí)施例中。在下面的描述中,提供許多具體細(xì)節(jié)從而給出對(duì)本發(fā)明的實(shí)施例的充分理解。然而,本領(lǐng)域技術(shù)人員將意識(shí)到,可以實(shí)踐本發(fā)明的技術(shù)方案而沒有特定細(xì)節(jié)中的一個(gè)或更多,或者可以采用其它的方法、組元、裝置、步驟等。在其它情況下,不詳細(xì)示出或描述公知方法、裝置、實(shí)現(xiàn)或者操作以避免模糊本發(fā)明的各方面。
附圖中所示的方框圖僅僅是功能實(shí)體,不一定必須與物理上獨(dú)立的實(shí)體相對(duì)應(yīng)。即,可以采用軟件形式來實(shí)現(xiàn)這些功能實(shí)體,或在一個(gè)或多個(gè)硬件模塊或集成電路中實(shí)現(xiàn)這些功能實(shí)體,或在不同網(wǎng)絡(luò)和/或處理器裝置和/或微控制器裝置中實(shí)現(xiàn)這些功能實(shí)體。
附圖中所示的流程圖僅是示例性說明,不是必須包括所有的內(nèi)容和操作/步驟,也不是必須按所描述的順序執(zhí)行。例如,有的操作/步驟還可以分解,而有的操作/步驟可以合并或部分合并,因此實(shí)際執(zhí)行的順序有可能根據(jù)實(shí)際情況改變。
圖1示意性示出了根據(jù)本發(fā)明的第一個(gè)實(shí)施例的xml文檔的解析方法的流程圖。
參照?qǐng)D1,根據(jù)本發(fā)明的第一個(gè)實(shí)施例的xml文檔的解析方法,包括以下步驟:
步驟s10,獲取待解析的xml文檔,并獲取一指定節(jié)點(diǎn)的信息。
在該實(shí)施例中,指定節(jié)點(diǎn)的個(gè)數(shù)并不作具體限定,也即是說,指定節(jié)點(diǎn)的個(gè)數(shù)既可以是一個(gè),也可以是多個(gè)。指定節(jié)點(diǎn)的信息需要能夠?qū)υ摴?jié)點(diǎn)進(jìn)行標(biāo)識(shí),比如可以是該節(jié)點(diǎn)的名稱。
步驟s12,解析所述xml文檔,得到所述xml文檔中的所有節(jié)點(diǎn)。
根據(jù)本發(fā)明的示例性實(shí)施例,步驟s12包括:解析所述xml文檔,得到所述xml文檔中的根節(jié)點(diǎn);基于所述根節(jié)點(diǎn),循環(huán)獲取所述xml文檔中的所有節(jié)點(diǎn)。
更具體地,可以通過dom4j(是一個(gè)開源的xml解析包)工具解析所述xml文檔,得到所述xml文檔中的所有節(jié)點(diǎn)。
當(dāng)?shù)玫絰ml文檔的所有節(jié)點(diǎn)之后,可以生成xml文檔的節(jié)點(diǎn)列表,這樣可以便于后續(xù)在節(jié)點(diǎn)列表中查找相應(yīng)的節(jié)點(diǎn)。
步驟s14,在所述所有節(jié)點(diǎn)中匹配所述指定節(jié)點(diǎn),并獲取所述指定節(jié)點(diǎn)的相關(guān)數(shù)據(jù)。
在本發(fā)明的實(shí)施例中,指定節(jié)點(diǎn)的相關(guān)數(shù)據(jù)包括:所述指定節(jié)點(diǎn)的名稱和所述指定節(jié)點(diǎn)的內(nèi)容。
其中,若xml文檔中的節(jié)點(diǎn)是通過節(jié)點(diǎn)列表的形式進(jìn)行存儲(chǔ)的,那么步驟s14具體包括:在所述節(jié)點(diǎn)列表中匹配所述指定節(jié)點(diǎn)。通過采用節(jié)點(diǎn)列表,可以快速地實(shí)現(xiàn)節(jié)點(diǎn)的匹配過程。
步驟s16,根據(jù)所述指定節(jié)點(diǎn)的相關(guān)數(shù)據(jù)生成對(duì)應(yīng)的map接口。
根據(jù)本發(fā)明的示例性實(shí)施例,步驟s16包括:將所述指定節(jié)點(diǎn)的名稱作為所述map接口的key,并將所述指定節(jié)點(diǎn)的內(nèi)容作為所述map接口的value,以生成所述map接口。
綜上,如圖2所示,本發(fā)明實(shí)施例的方案可以自動(dòng)對(duì)xml文檔進(jìn)行解析并轉(zhuǎn)換為map接口,極大地減輕了編程人員的代碼開發(fā)壓力。
具體地,當(dāng)需要將xml解析為map時(shí),會(huì)將xml的節(jié)點(diǎn),層層往map中賦值,其中xml節(jié)點(diǎn)的名稱為map的key,xml節(jié)點(diǎn)的內(nèi)容為map的value;最后將map最深處的key-value鍵值對(duì)循環(huán)到最外面。如果存在重復(fù)的key,則其對(duì)應(yīng)的value轉(zhuǎn)換為list方式進(jìn)行存儲(chǔ)。最終在需要取用某個(gè)屬性時(shí),可以直接根據(jù)節(jié)點(diǎn)的名稱,找到需要的節(jié)點(diǎn)的內(nèi)容,快速的完成需要的數(shù)據(jù)獲取。具體流程可參照?qǐng)D3。
如圖3所示,根據(jù)本發(fā)明的第二個(gè)實(shí)施例的xml文檔的解析方法,包括:
步驟s302,獲得xml文檔和需要的參數(shù)。需要說明的是,需要的參數(shù)即為給定的節(jié)點(diǎn)的相關(guān)信息,比如給定的節(jié)點(diǎn)的名稱。
步驟s304,使用dom4j解析該xml文檔,獲得頂端元素。其中,頂端元素即為根節(jié)點(diǎn)。
步驟s306,循環(huán)獲得所有元素(即獲得所有節(jié)點(diǎn)),放入list集合中。
步驟s308,遍歷需要的參數(shù),在list集合中匹配相應(yīng)的節(jié)點(diǎn)。即根據(jù)給定的節(jié)點(diǎn)的相關(guān)信息在list集合中匹配對(duì)應(yīng)的節(jié)點(diǎn)。
步驟s310,獲取匹配到的節(jié)點(diǎn)的數(shù)據(jù)。
步驟s312,放入集合中作為輸出。
步驟s314,返回結(jié)果map。其中,xml節(jié)點(diǎn)的名稱為map的key,xml節(jié)點(diǎn)的內(nèi)容為map的value。
圖4示意性示出了根據(jù)本發(fā)明的實(shí)施例的xml文檔的解析裝置的框圖。
如圖4所示,根據(jù)本發(fā)明的實(shí)施例的xml文檔的解析裝置400,包括:第一獲取單元402、解析單元404、第二獲取單元406和生成單元408。
具體地,第一獲取單元402用于獲取待解析的xml文檔,并獲取一指定節(jié)點(diǎn)的信息;解析單元404用于解析所述xml文檔,得到所述xml文檔中的所有節(jié)點(diǎn);第二獲取單元406用于在所述所有節(jié)點(diǎn)中匹配所述指定節(jié)點(diǎn),并獲取所述指定節(jié)點(diǎn)的相關(guān)數(shù)據(jù);生成單元408用于根據(jù)所述指定節(jié)點(diǎn)的相關(guān)數(shù)據(jù)生成對(duì)應(yīng)的map接口。
在本發(fā)明的一些實(shí)施例中,基于前述方案,所述解析單元404配置為:解析所述xml文檔,得到所述xml文檔中的根節(jié)點(diǎn);基于所述根節(jié)點(diǎn),循環(huán)獲取所述xml文檔中的所有節(jié)點(diǎn)。
在本發(fā)明的一些實(shí)施例中,基于前述方案,所述解析單元404還配置為:根據(jù)所述xml文檔中的所有節(jié)點(diǎn),生成所述xml文檔的節(jié)點(diǎn)列表;所述第二獲取單元406配置為:在所述節(jié)點(diǎn)列表中匹配所述指定節(jié)點(diǎn)。
在本發(fā)明的一些實(shí)施例中,基于前述方案,所述指定節(jié)點(diǎn)的相關(guān)數(shù)據(jù)包括:所述指定節(jié)點(diǎn)的名稱和所述指定節(jié)點(diǎn)的內(nèi)容。
在本發(fā)明的一些實(shí)施例中,基于前述方案,所述生成單元408配置為:將所述指定節(jié)點(diǎn)的名稱作為所述map接口的key,并將所述指定節(jié)點(diǎn)的內(nèi)容作為所述map接口的value,以生成所述map接口。
本發(fā)明上述實(shí)施例提供的xml解析為map的方案,可以提供對(duì)小型xml文件的快速解析,從而無需關(guān)心如果進(jìn)行數(shù)據(jù)轉(zhuǎn)化,讓程序員更加專注于技術(shù)的提升和業(yè)務(wù)的邏輯。同時(shí)解決了僅需要個(gè)xml文檔的少量數(shù)據(jù),但需要拼裝xml文檔對(duì)應(yīng)的整個(gè)對(duì)象的問題,有效減少了協(xié)議對(duì)象的創(chuàng)建,減輕程序員代碼開發(fā)壓力和強(qiáng)度。
應(yīng)當(dāng)注意,盡管在上文詳細(xì)描述中提及了用于動(dòng)作執(zhí)行的設(shè)備的若干模塊或者單元,但是這種劃分并非強(qiáng)制性的。實(shí)際上,根據(jù)本發(fā)明的實(shí)施方式,上文描述的兩個(gè)或更多模塊或者單元的特征和功能可以在一個(gè)模塊或者單元中具體化。反之,上文描述的一個(gè)模塊或者單元的特征和功能可以進(jìn)一步劃分為由多個(gè)模塊或者單元來具體化。
通過以上的實(shí)施方式的描述,本領(lǐng)域的技術(shù)人員易于理解,這里描述的示例實(shí)施方式可以通過軟件實(shí)現(xiàn),也可以通過軟件結(jié)合必要的硬件的方式來實(shí)現(xiàn)。因此,根據(jù)本發(fā)明實(shí)施方式的技術(shù)方案可以以軟件產(chǎn)品的形式體現(xiàn)出來,該軟件產(chǎn)品可以存儲(chǔ)在一個(gè)非易失性存儲(chǔ)介質(zhì)(可以是cd-rom,u盤,移動(dòng)硬盤等)中或網(wǎng)絡(luò)上,包括若干指令以使得一臺(tái)計(jì)算設(shè)備(可以是個(gè)人計(jì)算機(jī)、服務(wù)器、觸控終端、或者網(wǎng)絡(luò)設(shè)備等)執(zhí)行根據(jù)本發(fā)明實(shí)施方式的方法。
本領(lǐng)域技術(shù)人員在考慮說明書及實(shí)踐這里公開的發(fā)明后,將容易想到本發(fā)明的其它實(shí)施方案。本申請(qǐng)旨在涵蓋本發(fā)明的任何變型、用途或者適應(yīng)性變化,這些變型、用途或者適應(yīng)性變化遵循本發(fā)明的一般性原理并包括本發(fā)明未公開的本技術(shù)領(lǐng)域中的公知常識(shí)或慣用技術(shù)手段。說明書和實(shí)施例僅被視為示例性的,本發(fā)明的真正范圍和精神由下面的權(quán)利要求指出。
應(yīng)當(dāng)理解的是,本發(fā)明并不局限于上面已經(jīng)描述并在附圖中示出的精確結(jié)構(gòu),并且可以在不脫離其范圍進(jìn)行各種修改和改變。本發(fā)明的范圍僅由所附的權(quán)利要求來限制。