700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > java正则表达式去除xml标签之间的空格_HTML解析器——htmlparser2使用详解 换个姿势

java正则表达式去除xml标签之间的空格_HTML解析器——htmlparser2使用详解 换个姿势

时间:2022-03-11 10:52:56

相关推荐

java正则表达式去除xml标签之间的空格_HTML解析器——htmlparser2使用详解 换个姿势

上一篇文章我们介绍了一个html/xml解析器——htmlparser,这篇文章我们介绍另外一个解析模块htmlparser2,后者是对前者的重构,同时对前者的API做了部分兼容。

用法简介

安装

const { Parser } = require('htmlparser2');const parser = new Parser(handler, options);parser.parseComplete('html/xml内容');

写法

const { Parser } = require('htmlparser2');const parser = new Parser(handler, options);parser.parseComplete('html/xml内容');

htmlparser2提供了一个解析器——Parser,初始化它至少需要一个handler,options是可选的。

handler是一个对象,在这个对象上可以设置很多的钩子函数,Parser解析时会在每个阶段运行对应的钩子函数。

以下是可以设置的所有的钩子函数,

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内容的,而htmlparser2则不同,它会按顺序读取html的每个字符,并且推测后面字符是标签名、属性还是其他的类型,所以htmlparser2在解析完每一个标签后都会运行相应的钩子函数。

先来看一下例子,

图1

图1中设置了所有的钩子函数以便来说明每个钩子函数的作用,运行一下,

图2

对照图1和图2就能看出来每个钩子函数的运行时机,这其中有以下几个钩子函数需要注意一下。

oncdatastart和oncdataend会在解析标签时触发,但是触发的前提是选项设置了recognizeCDATA=true或者xmlMode=true;onprocessinginstruction会在解析或者<?xxyy>这样的标签时触发,xx和yy中间可以有分隔符(斜杠或者空格),分隔符前面的字符串就是钩子函数中的name的值;运行parseComplete方法会执行reset钩子函数,如果仅仅执行parser的write或者end方法并不会执行reset方法。

除了自定义handler以外,htmlparser2还提供了几个handler,比如DomHandler,用法如下:

图3

运行一下,我们看看结果,

图4

如果4所示,DomHandler处理的结果是以数组的形式输出的,在每个单元数据中还可以拿到上一个、下一个以及父节点的数据。

htmlparser2还可以通过操作流Stream解析内容,写法如下:

图5

总结

这篇文章和上一篇是姊妹篇,都是介绍解析html/xml内容的模块,通过对比,我们发现htmlparser2模块功能更强大一些,也更灵活一些,同时也兼容htmlparser模块的一些接口。虽然两者功能类似,但是这给了我们更多的选择性。

喜欢我的文章就关注我吧,有问题可以发表评论,我们一起学习,共同成长!

java正则表达式去除xml标签之间的空格_HTML解析器——htmlparser2使用详解 换个姿势解析html和xml

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。