佳木斯湛栽影视文化发展公司

主頁(yè) > 知識(shí)庫(kù) > 把數(shù)據(jù)轉(zhuǎn)換成XML格式的好處

把數(shù)據(jù)轉(zhuǎn)換成XML格式的好處

熱門(mén)標(biāo)簽:智能手機(jī) 服務(wù)器配置 網(wǎng)站文章發(fā)布 檢查注冊(cè)表項(xiàng) 美圖手機(jī) 呼叫中心市場(chǎng)需求 鐵路電話系統(tǒng) 銀行業(yè)務(wù)
    我們常常會(huì)碰到需要處理以各種格式(從以逗號(hào)或者制表符做分隔符的文件到更負(fù)載的格式)保存或者傳輸?shù)臄?shù)據(jù)的情況,對(duì)每一種格式你都需要對(duì)應(yīng)的解析器(parser)。這一缺點(diǎn)減緩了開(kāi)發(fā)進(jìn)度,而且可能會(huì)導(dǎo)致錯(cuò)誤的發(fā)生。一個(gè)解決方案就是把常用格式的數(shù)據(jù)轉(zhuǎn)化成XML文檔,然后對(duì)它進(jìn)行保存、處理或者轉(zhuǎn)換成其它格式。
一個(gè)實(shí)例

現(xiàn)在已經(jīng)有好多種實(shí)現(xiàn)在軟件內(nèi)部或者軟件之間進(jìn)行數(shù)據(jù)保存、導(dǎo)出、導(dǎo)入以及傳輸功能的數(shù)據(jù)格式。最常見(jiàn)的是定界格式(delimited format),如逗號(hào)或者制表符分隔數(shù)據(jù)格式以及定長(zhǎng)數(shù)據(jù)格式。假設(shè)我們有一個(gè)地址簿程序,該程序提供把數(shù)據(jù)導(dǎo)出成逗號(hào)分隔以及固定長(zhǎng)度這兩種格式的功能。

在逗號(hào)分隔格式中,用逗號(hào)來(lái)分隔同一個(gè)數(shù)據(jù)記錄中的不同字段,如清單A所示。而在固定長(zhǎng)度數(shù)據(jù)格式中,記錄的每一個(gè)字段都應(yīng)該有一個(gè)標(biāo)準(zhǔn)長(zhǎng)度。清單B給出了一個(gè)固定長(zhǎng)度格式的地址簿。

創(chuàng)建XML文檔

現(xiàn)在,讓我們解析輸入數(shù)據(jù)并把它轉(zhuǎn)換成XML文檔。XML文檔(即org.w3c.dom.Document)是全部文檔對(duì)象模型(DOM)的原始數(shù)據(jù)類型,并且它提供了對(duì)文檔數(shù)據(jù)的訪問(wèn)。

你可以用執(zhí)行buildDocument(InputStream is)方法來(lái)創(chuàng)建與你的數(shù)據(jù)對(duì)應(yīng)的文檔,如代碼清單C所示。該方法逐行讀取輸入數(shù)據(jù)流,并根據(jù)給定格進(jìn)行來(lái)逐行分析。

如果你想解析分界格式數(shù)據(jù),你需要?jiǎng)?chuàng)建構(gòu)造函數(shù)為PlainTextToXmlFormatter(String[ ] colName,String delim)的類的實(shí)例,其分界符可以是任何字符串。在固定長(zhǎng)度格式的情況下,你應(yīng)該使用第二種構(gòu)造函數(shù)PlainTextToXmlFormatter(String[ ] colName,int[ ] colLen),它的一個(gè)參數(shù)為字段長(zhǎng)度數(shù)組。在我們所給的地址簿例子中,各字段的長(zhǎng)度分別為10、10、30以及10個(gè)字符。參數(shù)colName是保存了目標(biāo)數(shù)據(jù)記錄的名字的數(shù)組,在我們給出的這個(gè)例子中,名字分別為名(firstName)、姓(lastName)、email以及電話號(hào)碼(phone)。

把數(shù)據(jù)行轉(zhuǎn)換為數(shù)據(jù)符號(hào)的實(shí)際解析過(guò)程也就是執(zhí)行g(shù)etStringArray(String read,String delim)或者parseFixedLengthMessage(String read,int[ ] colLen)方法的過(guò)程。其返回值是一個(gè)String型數(shù)組,這個(gè)數(shù)組是上述兩個(gè)方法把給定輸入進(jìn)行分解而得來(lái)的。如果數(shù)據(jù)格式不對(duì),就會(huì)拋出一個(gè)例外并且終止解析過(guò)錯(cuò)。調(diào)用setSkipError(true)方法就可以忽略例外并完成數(shù)據(jù)解析過(guò)程。調(diào)用這個(gè)方法可以防止拋出例外,但它仍允許程序向錯(cuò)誤輸出流打印錯(cuò)誤信息。

當(dāng)行被解析成標(biāo)記后,它們作為XML文檔的元素而加入到XML文檔之中。放入到元素之中的每一行記錄都有一個(gè)默認(rèn)的名字line,你也可以調(diào)用setDataLineName()來(lái)指定名字。每一個(gè)數(shù)據(jù)記錄都是一個(gè)列元素,列元素的名字由相應(yīng)的類構(gòu)造函數(shù)提供,子元素加到行元素之中。

在輸入數(shù)據(jù)完全讀取之后,你就得到了一個(gè)有效的XML文檔,你可以進(jìn)一步處理這個(gè)文檔?,F(xiàn)在,由于數(shù)據(jù)是按眾所周知的樹(shù)狀結(jié)構(gòu)來(lái)組織的,因此處理它非常簡(jiǎn)單。例如,你可以把這個(gè)文檔送交給第三方,只要第三方知道該文檔的文檔類型定義(Document Type Definition ,DTD),那么他就可以很容易的處理文檔了。你還可以調(diào)用writeDocument(Document doc,OutputStream osOut)方法來(lái)保存這個(gè)文檔。代碼清單D就給出一個(gè)把XML文檔保存到一個(gè)文件中的例子。

用XSLT轉(zhuǎn)換來(lái)查看數(shù)據(jù)

你還可以把XML數(shù)據(jù)轉(zhuǎn)換成其它格式,并用不同的視圖來(lái)表示其內(nèi)容。最簡(jiǎn)單的方法就是使用XSLT轉(zhuǎn)換,它提供了一種強(qiáng)大的面向樹(shù)的轉(zhuǎn)換語(yǔ)言實(shí)現(xiàn),可以把使用一種詞匯表的XML實(shí)例轉(zhuǎn)換成簡(jiǎn)單文本、HTML或者使用其它詞匯表的XML。

對(duì)給定的XML輸入,你可以用XSLT語(yǔ)言來(lái)創(chuàng)建你所期望的輸出。例如,通過(guò)執(zhí)行transformData(InputStream xmlIn,InputStream xslIn,OutputStream transfOut),你就可以把XML數(shù)據(jù)轉(zhuǎn)換成一個(gè)HTML文檔。代碼清單E提供了XSLT轉(zhuǎn)換的一個(gè)例子,而清單F給出了地址簿條目的HTML視圖。

簡(jiǎn)化對(duì)數(shù)據(jù)的管理

在本文中,我們通過(guò)分析PlainTextToXmlFormatter類而學(xué)會(huì)了如何把常用格式數(shù)據(jù)轉(zhuǎn)換成XML文檔。我們還看到了如何借助于XSLT轉(zhuǎn)換而用不同的視圖來(lái)表示XML文檔。當(dāng)你需要處理各種格式的數(shù)據(jù)時(shí),采納上述技術(shù)或許就就是一個(gè)好的解決方案,從而節(jié)省了你的寶貴時(shí)間并減少了出錯(cuò)的可能性。

標(biāo)簽:滄州 樂(lè)山 上海 紅河 長(zhǎng)治 河南 新疆 沈陽(yáng)

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《把數(shù)據(jù)轉(zhuǎn)換成XML格式的好處》,本文關(guān)鍵詞  ;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 收縮
    • 微信客服
    • 微信二維碼
    • 電話咨詢

    • 400-1100-266
    长葛市| 秦安县| 伊春市| 蓬安县| 饶平县| 开封市| 台南市| 浦北县| 拜泉县| 佛教| 广德县| 旅游| 通州市| 女性| 醴陵市| 新巴尔虎右旗| 湖州市| 龙陵县| 开江县| 靖宇县| 诸城市| 九龙县| 黎平县| 杭锦旗| 荣成市| 肇东市| 浠水县| 北票市| 鄯善县| 卢龙县| 敦化市| 肃南| 新龙县| 孙吴县| 紫阳县| 隆林| 鹿邑县| 买车| 安达市| 石首市| 定西市|