專利名稱::一種網(wǎng)頁(yè)內(nèi)容的格式化輸出方法
技術(shù)領(lǐng)域:
:本發(fā)明涉及一種網(wǎng)絡(luò)信息輸出技術(shù),尤其是一種互聯(lián)網(wǎng)網(wǎng)頁(yè)內(nèi)容的格式化輸出方法。
背景技術(shù):
:隨著互聯(lián)網(wǎng)信息技術(shù)的不斷發(fā)展和日趨成熟,網(wǎng)絡(luò)信息蔓延到千家萬(wàn)戶。雖說(shuō)已是互聯(lián)網(wǎng)無(wú)所不能的時(shí)代,但還是會(huì)需要將網(wǎng)頁(yè)內(nèi)容打印出來(lái)閱讀。對(duì)于網(wǎng)生的電子報(bào)、電子期刊這些更適合于在網(wǎng)絡(luò)環(huán)境中閱讀的內(nèi)容,怎樣通過(guò)打印輸出生成適當(dāng)?shù)募埫巾?yè)面呢?長(zhǎng)時(shí)間來(lái),這一直是一個(gè)課題。將網(wǎng)頁(yè)中特定區(qū)域的內(nèi)容格式化輸出成純文本格式,給使用者近似于瀏覽器中的格式的文本,成為技術(shù)人員需要解決的問(wèn)題。
發(fā)明內(nèi)容有鑒于此,本發(fā)明的主要目的在于提供一種網(wǎng)頁(yè)內(nèi)容的格式化輸出方法,既能快速便捷地完成網(wǎng)頁(yè)內(nèi)容的格式化輸出,又能提高輸出文件的質(zhì)量,改善使用者的閱讀體驗(yàn)。為達(dá)到上述目的,本發(fā)明提供的方法是找到網(wǎng)頁(yè)區(qū)域并解析成樹結(jié)構(gòu),根據(jù)每個(gè)標(biāo)簽的(顯示)含義,及利用雙堆棧找到哪個(gè)點(diǎn)需要加回車,而段落的開始需要加上縮進(jìn)。本發(fā)明的技術(shù)方案是這樣實(shí)現(xiàn)的:A、解析Html頁(yè)面,將html轉(zhuǎn)換成標(biāo)準(zhǔn)xml格式;B、先有預(yù)留一個(gè)字符串緩沖區(qū)(StringBuffer),生成文檔樹結(jié)構(gòu)(DOMTree)并遍歷該樹結(jié)構(gòu)的所有節(jié)點(diǎn),將文本內(nèi)容追加到字符串緩沖區(qū)中。遍歷完成后字符串緩沖區(qū)的內(nèi)容就是最終的格式化文本。進(jìn)一步地,步驟A中所述細(xì)化為:Al分析原始文檔,補(bǔ)足html規(guī)范中需要的TAG,和缺少結(jié)尾的TAG,以及處理不規(guī)范的TAG屬性的寫法,將非良構(gòu)的html頁(yè)變成良構(gòu)的;A2過(guò)濾掉〈SCRIPTXSTYLEXSELECTXINPUT〉和正文顯示無(wú)關(guān)的標(biāo)記。較佳地,步驟A先找到頁(yè)面中的有用區(qū)域,即網(wǎng)頁(yè)的正文區(qū)域。進(jìn)一步地,步驟B,將已經(jīng)良構(gòu)化的html頁(yè)面解析成文檔樹,并遍歷該樹,找到樹中的文本節(jié)點(diǎn)。進(jìn)一步地,步驟B中所述細(xì)化為:BI遍歷樹結(jié)構(gòu)可以借用一個(gè)堆棧結(jié)構(gòu),倉(cāng)Il建另一個(gè)堆棧記錄當(dāng)前訪問(wèn)節(jié)點(diǎn)的父節(jié)點(diǎn),以下稱其為父節(jié)點(diǎn)堆棧,并準(zhǔn)備好一個(gè)字符串緩沖區(qū),準(zhǔn)備接受字符;B2當(dāng)遇到〈address〉,〈blackquote〉,<div>,<dl>,<hl>,<h2>,<h3>,<h4>,<h5>,<h6>,<ol>,〈table〉,<tr>,<ul>,,<br>以及非html的標(biāo)簽時(shí),說(shuō)明是一個(gè)段落的開始需要往字符串緩沖區(qū)中追加一個(gè)回車;B3當(dāng)遇到#TEXT的節(jié)點(diǎn),文本追加進(jìn)字符緩沖區(qū)中;B4當(dāng)某個(gè)節(jié)點(diǎn)訪問(wèn)結(jié)束,并且該節(jié)點(diǎn)有子節(jié)點(diǎn)則將該節(jié)點(diǎn)壓入父節(jié)點(diǎn)堆棧;B5當(dāng)某個(gè)節(jié)點(diǎn)訪問(wèn)結(jié)束,并且該節(jié)點(diǎn)沒有子節(jié)點(diǎn)也沒有右兄弟節(jié)點(diǎn),則查看父節(jié)點(diǎn)的堆棧,并彈出該父節(jié)點(diǎn)的堆棧,并彈出該父節(jié)點(diǎn),再次訪問(wèn)該節(jié)點(diǎn),并按B2處理;B6當(dāng)某個(gè)節(jié)點(diǎn)訪問(wèn)結(jié)束,并且該節(jié)點(diǎn)是從父節(jié)點(diǎn)堆棧中彈出的再次訪問(wèn)的節(jié)點(diǎn)且該節(jié)點(diǎn)沒有右兄弟節(jié)點(diǎn)了,則彈出該父節(jié)點(diǎn),并再次訪問(wèn)該節(jié)點(diǎn),并按B2處理。較佳地,步驟B2中的追加回車時(shí),檢查字符串緩沖區(qū)中最后一個(gè)字符如果是回車或字符串緩沖區(qū)中當(dāng)前沒有字符,就不再追加了,以免追加過(guò)多的回車,破壞文章的顯示格式。較佳地,步驟B3檢查字符串緩沖區(qū)中最后一個(gè)字符如果是回車或字符串緩沖區(qū)中當(dāng)前沒有字符,則在文本開始加入縮進(jìn),可以使文本格式展示效果更好。較佳地,步驟B對(duì)〈strongXb〉標(biāo)簽中的字符記錄下需要加黑,可以使文本格式展示效果更好。本發(fā)明提供的網(wǎng)頁(yè)內(nèi)容輸出方法,使得對(duì)網(wǎng)頁(yè)的正文以更接近瀏覽器似的格式化輸出,給用戶更好的閱讀體驗(yàn)。具體實(shí)施例方式以下所述實(shí)施例詳細(xì)說(shuō)明了本發(fā)明。本發(fā)明的方法使用先序遍歷這棵樹,利用一個(gè)堆棧結(jié)構(gòu)記錄當(dāng)前訪問(wèn)的節(jié)點(diǎn),并且在其所有子孫節(jié)點(diǎn)遍歷完成后,再次訪問(wèn)該節(jié)點(diǎn)以判斷是否需要加回車。如片段B的樹結(jié)構(gòu)aaaaaa的父節(jié)點(diǎn)P,第二次訪問(wèn)后需要在aaaaa后加回車。片段A權(quán)利要求1.一種網(wǎng)頁(yè)內(nèi)容的格式化輸出方法,其特征在于,該方法包括以下步驟:A、解析Html頁(yè)面,將html轉(zhuǎn)換成標(biāo)準(zhǔn)xml格式;B、先有預(yù)留一個(gè)字符串緩沖區(qū)(StringBuffer),生成文檔樹結(jié)構(gòu)(DOMTree)并遍歷該樹結(jié)構(gòu)的所有節(jié)點(diǎn),將文本內(nèi)容追加到字符串緩沖區(qū)中,遍歷完成后字符串緩沖區(qū)的內(nèi)容就是最終的格式化文本。2.根據(jù)權(quán)利要求1所述的方法,其特征在于,步驟A中分析原始文檔,補(bǔ)足html規(guī)范中需要的TAG,和缺少結(jié)尾的TAG,以及處理不規(guī)范的TAG屬性的寫法,將非良構(gòu)的html頁(yè)變成良構(gòu)的。3.根據(jù)權(quán)利要求2所述的方法,其特征在于,過(guò)濾掉<SCRIPTXSTYLEXSELECTXINPUT>和正文顯示無(wú)關(guān)的標(biāo)記。4.根據(jù)權(quán)利要求1所述的方法,其特征在于,步驟B將已經(jīng)良構(gòu)化的html頁(yè)面解析成文檔樹,并遍歷該樹,找到樹中的文本節(jié)點(diǎn)。5.根據(jù)權(quán)利要求4所述的方法,其特征在于,遍歷樹結(jié)構(gòu)可以借用一個(gè)堆棧結(jié)構(gòu),創(chuàng)建另一個(gè)堆棧記錄當(dāng)前訪問(wèn)節(jié)點(diǎn)的父節(jié)點(diǎn),以下稱其為父節(jié)點(diǎn)堆棧,并準(zhǔn)備好一個(gè)字符串緩沖區(qū),準(zhǔn)備接受字符。6.根據(jù)權(quán)利要求5所述的方法,其特征在于,當(dāng)遇到〈address〉,〈blackquote〉,<div>,<dl>,<hl>,<h2>,<h3>,<h4>,<h5>,<h6>,<ol>,〈table〉,<tr>,<ul>,>p<<br>以及非html的標(biāo)簽時(shí),說(shuō)明是一個(gè)段落的開始需要往字符串緩沖區(qū)中追加一個(gè)回車。7.根據(jù)權(quán)利要求6所述的方法,其特征在于,當(dāng)遇到#TEXT的節(jié)點(diǎn),文本追加進(jìn)字符緩沖區(qū)中。8.根據(jù)權(quán)利要求7所述的方法,其特征在于,當(dāng)某個(gè)節(jié)點(diǎn)訪問(wèn)結(jié)束,并且該節(jié)點(diǎn)有子節(jié)點(diǎn)則將該節(jié)點(diǎn)壓入父節(jié)點(diǎn)堆棧。9.根據(jù)權(quán)利要求8所述的方法,其特征在于,當(dāng)某個(gè)節(jié)點(diǎn)訪問(wèn)結(jié)束,并且該節(jié)點(diǎn)沒有子節(jié)點(diǎn)也沒有右兄弟節(jié)點(diǎn),則查看父節(jié)點(diǎn)的堆棧,并彈出該父節(jié)點(diǎn)的堆棧,并彈出該父節(jié)點(diǎn),再次訪問(wèn)該節(jié)點(diǎn),并按B2處理。10.根據(jù)權(quán)利要求9所述的方法,其特征在于,當(dāng)某個(gè)節(jié)點(diǎn)訪問(wèn)結(jié)束,并且該節(jié)點(diǎn)是從父堆棧中彈出的再次訪問(wèn)的節(jié)點(diǎn)且該節(jié)點(diǎn)沒有右兄弟節(jié)點(diǎn)了,則彈出該父節(jié)點(diǎn),并再次訪問(wèn)該節(jié)點(diǎn),并按B2處理。全文摘要本發(fā)明公開了一種網(wǎng)頁(yè)內(nèi)容的格式化輸出方法,其特征在于,將網(wǎng)頁(yè)特定區(qū)域的內(nèi)容格式化輸出成純文本格式,并在適當(dāng)?shù)牡胤郊由峡s進(jìn)和回車等,使輸出的文本盡可能接近瀏覽器里的展示形式,該方法包括解析Html頁(yè)面,將html轉(zhuǎn)換成標(biāo)準(zhǔn)xml格式;先有預(yù)留一個(gè)字符串緩沖區(qū)(StringBuffer),生成文檔樹結(jié)構(gòu)(DOMTree)并遍歷該樹結(jié)構(gòu)的所有節(jié)點(diǎn),將文本內(nèi)容追加到字符串緩沖區(qū)中。遍歷完成后字符串緩沖區(qū)的內(nèi)容就是最終的格式化文本。本發(fā)明提供的網(wǎng)頁(yè)內(nèi)容輸出方法,使得對(duì)網(wǎng)頁(yè)的正文以更接近瀏覽器似的格式化輸出,給用戶更好的閱讀體驗(yàn)。文檔編號(hào)G06F17/30GK103116592SQ20121000911公開日2013年5月22日申請(qǐng)日期2012年1月13日優(yōu)先權(quán)日2012年1月13日發(fā)明者黃靖申請(qǐng)人:昆山麥克斯泰科技有限公司