java正则表达式去除xml标签之间的空格_HTML解析器——htmlparser2使用详解,换个姿势解析html和xml
上一篇文章我們介紹了一個html/xml解析器——htmlparser,這篇文章我們介紹另外一個解析模塊htmlparser2,后者是對前者的重構(gòu),同時對前者的API做了部分兼容。
用法簡介
安裝
const { Parser } = require('htmlparser2');const parser = new Parser(handler, options);parser.parseComplete('html/xml內(nèi)容');寫法
const { Parser } = require('htmlparser2');const parser = new Parser(handler, options);parser.parseComplete('html/xml內(nèi)容');htmlparser2提供了一個解析器——Parser,初始化它至少需要一個handler,options是可選的。
handler是一個對象,在這個對象上可以設(shè)置很多的鉤子函數(shù),Parser解析時會在每個階段運行對應(yīng)的鉤子函數(shù)。
以下是可以設(shè)置的所有的鉤子函數(shù),
onopentag( name, attributes)onopentagname( name)onattribute( name, value)ontext( text)onclosetag( name)onprocessinginstruction( name, data)oncomment( data)oncommentend()oncdatastart()oncdataend()onerror( error)onreset()onend()htmlparser模塊是通過正則表達式來解析html內(nèi)容的,而htmlparser2則不同,它會按順序讀取html的每個字符,并且推測后面字符是標(biāo)簽名、屬性還是其他的類型,所以htmlparser2在解析完每一個標(biāo)簽后都會運行相應(yīng)的鉤子函數(shù)。
先來看一下例子,
圖1
圖1中設(shè)置了所有的鉤子函數(shù)以便來說明每個鉤子函數(shù)的作用,運行一下,
圖2
對照圖1和圖2就能看出來每個鉤子函數(shù)的運行時機,這其中有以下幾個鉤子函數(shù)需要注意一下。
- oncdatastart和oncdataend會在解析標(biāo)簽時觸發(fā),但是觸發(fā)的前提是選項設(shè)置了recognizeCDATA=true或者xmlMode=true;
- onprocessinginstruction會在解析或者<?xxyy>這樣的標(biāo)簽時觸發(fā),xx和yy中間可以有分隔符(斜杠或者空格),分隔符前面的字符串就是鉤子函數(shù)中的name的值;
- 運行parseComplete方法會執(zhí)行reset鉤子函數(shù),如果僅僅執(zhí)行parser的write或者end方法并不會執(zhí)行reset方法。
除了自定義handler以外,htmlparser2還提供了幾個handler,比如DomHandler,用法如下:
圖3
運行一下,我們看看結(jié)果,
圖4
如果4所示,DomHandler處理的結(jié)果是以數(shù)組的形式輸出的,在每個單元數(shù)據(jù)中還可以拿到上一個、下一個以及父節(jié)點的數(shù)據(jù)。
htmlparser2還可以通過操作流Stream解析內(nèi)容,寫法如下:
圖5
總結(jié)
這篇文章和上一篇是姊妹篇,都是介紹解析html/xml內(nèi)容的模塊,通過對比,我們發(fā)現(xiàn)htmlparser2模塊功能更強大一些,也更靈活一些,同時也兼容htmlparser模塊的一些接口。雖然兩者功能類似,但是這給了我們更多的選擇性。
喜歡我的文章就關(guān)注我吧,有問題可以發(fā)表評論,我們一起學(xué)習(xí),共同成長!
總結(jié)
以上是生活随笔為你收集整理的java正则表达式去除xml标签之间的空格_HTML解析器——htmlparser2使用详解,换个姿势解析html和xml的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mac终端一次命令在多个虚拟机执行_Wi
- 下一篇: linux nginx 安装_艾编程基础