XML文檔解析方法及裝置與流程
2023-06-06 00:54:46

本發明涉及語言解析技術,尤其涉及一種XML文檔解析方法及裝置。
背景技術:
目前,可擴展標記語言(Extensible Markup Language,簡稱XML)得到了廣泛的應用,而其中XML解析技術是XML應用的關鍵。具體地,XML本身只是以純文本對數據進行編碼的一種格式,要想利用XML,或者說利用XML文件中所編碼的數據,必須先將數據從純文本中解析出來,因此,必須有一個能夠識別XML文檔中信息的解析器,用來解釋XML文檔並提取其中的數據。然而,根據數據提取的不同需求,又存在著多種解析方式,不同的解析方式有著各自的優缺點和適用環境。選擇合適的XML解析技術能夠有效提升應用系統的整體性能。
現有技術中常用的XML解析技術有文檔對象模型(Document Object Model,簡稱DOM)技術,具體地,採用DOM技術解析XML文檔時,需要先讀取整個XML文檔,然後再對整個XML文檔進行解析處理。
但是,採用現有的DOM技術解析XML文檔,會佔用計算機的大量內存,對於大容量的XML文檔,甚至會導致內存溢出。
技術實現要素:
本發明提供一種XML文檔解析方法及裝置,用於解決現有解析XML文檔的方法佔用內存過大的問題。
本發明第一方面提供一種XML文檔解析方法,包括:
獲取可擴展標記語言XML文檔讀取指令,所述讀取指令中包括至少一個待讀取行標識;
根據所述至少一個待讀取行標識,在XML文檔中讀取出所述至少一個待讀取行標識對應的至少一行數據;
將所述至少一行數據轉換為節點樹,其中,所述至少一行數據中的元素和屬性成為所述節點樹上的節點;
對所述節點樹上的節點依次進行解析,獲取所述XML文檔的解析結果。
本發明第二方面提供一種XML文檔解析裝置,包括:
獲取模塊,用於獲取可擴展標記語言XML文檔讀取指令,所述讀取指令中包括至少一個待讀取行標識;
讀取模塊,用於根據所述至少一個待讀取行標識,在XML文檔中讀取出所述至少一個待讀取行標識對應的至少一行數據;
轉換模塊,用於將所述至少一行數據轉換為節點樹,其中,所述至少一行數據中的元素和屬性成為所述節點樹上的節點;
解析模塊,用於對所述節點樹上的節點依次進行解析,獲取所述XML文檔的解析結果。
本發明提供的XML文檔解析方法及裝置,獲取XML文檔讀取指令,該讀取指令中包括至少一個待讀取行標識,根據上述至少一個待讀取行標識,在XML文檔中讀取出上述至少一個待讀取行標識對應的至少一行數據,並將這至少一行數據轉換為節點樹,對該節點樹上的節點進行解析,獲取解析結果,實現了只需要根據讀取指令讀取需要讀取的行數據即可,而無需讀取整個文檔,大大降低了計算機內存的消耗,避免了內存溢出的現象,另外,只需要將讀取的行數據轉換為節點樹進行解析,還可以提高解析效率。
附圖說明
為了更清楚地說明本發明實施例或現有技術中的技術方案,下面將對實施例或現有技術描述中所需要使用的附圖作一簡單地介紹,顯而易見地,下面描述中的附圖是本發明的一些實施例,對於本領域普通技術人員來講,在不付出創造性勞動性的前提下,還可以根據這些附圖獲得其他的附圖。
圖1為本發明提供的XML文檔解析方法實施例一的流程示意圖;
圖2為本發明提供的XML文檔解析裝置實施例一的結構示意圖;
圖3為本發明提供的XML文檔解析裝置實施例二的結構示意圖。
具體實施方式
為使本發明實施例的目的、技術方案和優點更加清楚,下面將結合本發明實施例中的附圖,對本發明實施例中的技術方案進行清楚、完整地描述,顯然,所描述的實施例是本發明一部分實施例,而不是全部的實施例。基於本發明中的實施例,本領域普通技術人員在沒有作出創造性勞動前提下所獲得的所有其他實施例,都屬於本發明保護的範圍。
圖1為本發明提供的XML文檔解析方法實施例一的流程示意圖,如圖1所示,該方法包括:
S101、獲取XML文檔讀取指令,該讀取指令中包括至少一個待讀取行標識。
一般地,用於讀取XML文檔的讀取指令可以是一段程序,這段程序中指示了待讀取的XML文檔中需要讀取的部分,具體地,可以通過待讀取行標識來指示。
S102、根據上述至少一個待讀取行標識,在XML文檔中讀取出上述至少一個待讀取行標識對應的至少一行數據。
需要說明的是,XML文檔由多行數據組成,可以以每行的行號或者關鍵詞作為標識,讀取的時候將讀取指令中的待讀取行標識與各行數據的標識進行匹配,以讀取出上述至少一個待讀取行標識對應的至少一行數據。
具體地,可以將讀取出的上述至少一個待讀取行標識對應的至少一行數據先緩存在字符串緩存(stringbuffer)空間內。
S103、將上述至少一行數據轉換為節點樹。其中,上述至少一行數據中的元素和屬性成為該節點樹上的節點。
在將上述至少一個待讀取行標識對應的至少一行數據都讀取完後,將stringbuffer中的數據構建為節點樹。具體構建過程中,可以直接按照XML文檔原本的邏輯關係進行構建,即將XML文檔中各元素、屬性之間的父子關係、兄弟關係等呈現為節點樹即可。
S104、對上述節點樹上的節點依次進行解析,獲取該XML文檔的解析結果。具體對節點進行解析的過程在此不作限制。
本實施例中,獲取XML文檔讀取指令,該讀取指令中包括至少一個待讀取行標識,根據上述至少一個待讀取行標識,在XML文檔中讀取出上述至少一個待讀取行標識對應的至少一行數據,並將這至少一行數據轉換為節 點樹,對該節點樹上的節點進行解析,獲取解析結果,實現了只需要根據讀取指令讀取需要讀取的行數據即可,而無需讀取整個文檔,大大降低了計算機內存的消耗,避免了內存溢出的現象,另外,只需要將讀取的行數據轉換為節點樹進行解析,還可以提高解析效率。
具體地,上述根據上述至少一個待讀取行標識,在XML文檔中讀取出上述至少一個待讀取行標識對應的至少一行數據,可以是,根據上述至少一個待讀取行標識,從上述XML文檔的第一行數據開始,逐行遍歷該XML文檔,依次從該XML文檔中讀取上述至少一個待讀取行標識對應的至少一行數據。具體讀取過程中,讀到某行數據時,看該行數據的標識與上述至少一個待讀取行標識中的某個待讀取行標識相同,則將這行數據讀取出,暫存於stringbuffer空間內。更具體地,每讀取一行數據,就將這行數據插入stringbuffer空間內,直到將上述至少一個待讀取行標識對應的至少一行數據全部讀取完則停止讀取。
進一步地,上述對上述節點樹上的節點依次進行解析,獲取該XML文檔的解析結果,具體可以是:遍歷該節點樹上的所有節點,依次對各節點進行解析,獲取該XML文檔的解析結果。具體實現過程中,對節點對應的元素、或者屬性進行解析,生成對象存入內存中。
為了更好的節約內存資源,在上述對上述節點樹上的節點依次進行解析,獲取該XML文檔的解析結果之後,將所讀取的上述至少一行數據進行釋放。具體地,將上述stringbuffer空間內臨時存儲的上述至少一行數據進行釋放,以節約空間。
圖2為本發明提供的XML文檔解析裝置實施例一的結構示意圖,如圖2所示,該裝置包括:獲取模塊201、讀取模塊202、轉換模塊203和解析模塊204,其中:
獲取模塊201,用於獲取可擴展標記語言XML文檔讀取指令,所述讀取指令中包括至少一個待讀取行標識。
讀取模塊202,用於根據所述至少一個待讀取行標識,在XML文檔中讀取出所述至少一個待讀取行標識對應的至少一行數據。
轉換模塊203,用於將所述至少一行數據轉換為節點樹,其中,所述至少一行數據中的元素和屬性成為所述節點樹上的節點。
解析模塊204,用於對所述節點樹上的節點依次進行解析,獲取所述XML文檔的解析結果。
本實施例中,獲取XML文檔讀取指令,該讀取指令中包括至少一個待讀取行標識,根據上述至少一個待讀取行標識,在XML文檔中讀取出上述至少一個待讀取行標識對應的至少一行數據,並將這至少一行數據轉換為節點樹,對該節點樹上的節點進行解析,獲取解析結果,實現了只需要根據讀取指令讀取需要讀取的行數據即可,而無需讀取整個文檔,大大降低了計算機內存的消耗,避免了內存溢出的現象,另外,只需要將讀取的行數據轉換為節點樹進行解析,還可以提高解析效率。
進一步地,讀取模塊202,具體用於根據所述至少一個待讀取行標識,從所述XML文檔的第一行數據開始,逐行遍歷所述XML文檔,並依次從所述XML文檔中讀取出所述至少一個待讀取行標識對應的至少一行數據。
解析模塊204,具體用於遍歷所述節點樹上的所有節點,依次對各所述節點進行解析,獲取所述XML文檔的解析結果。
圖3為本發明提供的XML文檔解析裝置實施例二的結構示意圖,如圖3所示,在圖2的基礎上,該裝置還包括:釋放模塊301。
釋放模塊301,用於在解析模塊204對所述節點樹上的節點依次進行解析,獲取所述XML文檔的解析結果之後,將所讀取的所述至少一行數據進行釋放。
該裝置用於執行前述方法實施例,其技術效果和實現原理類似,在此不再贅述。
在本發明所提供的幾個實施例中,應該理解到,所揭露的裝置和方法,可以通過其它的方式實現。例如,以上所描述的裝置實施例僅僅是示意性的,例如,所述單元的劃分,僅僅為一種邏輯功能劃分,實際實現時可以有另外的劃分方式,例如多個單元或組件可以結合或者可以集成到另一個系統,或一些特徵可以忽略,或不執行。另一點,所顯示或討論的相互之間的耦合或直接耦合或通信連接可以是通過一些接口,裝置或單元的間接耦合或通信連接,可以是電性,機械或其它的形式。
所述作為分離部件說明的單元可以是或者也可以不是物理上分開的,作為單元顯示的部件可以是或者也可以不是物理單元,即可以位於一個地方, 或者也可以分布到多個網絡單元上。可以根據實際的需要選擇其中的部分或者全部單元來實現本實施例方案的目的。
另外,在本發明各個實施例中的各功能單元可以集成在一個處理單元中,也可以是各個單元單獨物理存在,也可以兩個或兩個以上單元集成在一個單元中。上述集成的單元既可以採用硬體的形式實現,也可以採用硬體加軟體功能單元的形式實現。
上述以軟體功能單元的形式實現的集成的單元,可以存儲在一個計算機可讀取存儲介質中。上述軟體功能單元存儲在一個存儲介質中,包括若干指令用以使得一臺計算機設備(可以是個人計算機,伺服器,或者網絡設備等)或處理器(英文:processor)執行本發明各個實施例所述方法的部分步驟。而前述的存儲介質包括:U盤、移動硬碟、只讀存儲器(英文:Read-Only Memory,簡稱:ROM)、隨機存取存儲器(英文:Random Access Memory,簡稱:RAM)、磁碟或者光碟等各種可以存儲程序代碼的介質。
最後應說明的是:以上各實施例僅用以說明本發明的技術方案,而非對其限制;儘管參照前述各實施例對本發明進行了詳細的說明,本領域的普通技術人員應當理解:其依然可以對前述各實施例所記載的技術方案進行修改,或者對其中部分或者全部技術特徵進行等同替換;而這些修改或者替換,並不使相應技術方案的本質脫離本發明各實施例技術方案的範圍。