java-jsoup-解析html文本

java-jsoup-解析html文本


jsoup 是一款Java 的HTML解析器,可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API,可通过DOM,CSS以及类似于jQuery的操作方法来取出和操作数据。


一、maven 依赖
<!-- dom 解析 -->
<groupId>org.jsoup</groupId>
	<artifactId>jsoup</artifactId>
	<version>1.10.2</version>
</dependency>



二、实例
目标:
1.删除html中有指定属性的dom节点
2.将此逻辑加入 filter 中,可以对静态html、动态jsp等标准 html 输出流,进行权限控制(需要权限控制的节点需要加埋点,即:auth-code 属性)

package com.demo.preview;


import static org.junit.Assert.*;


import java.util.ArrayList;


import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import org.junit.Test;


import com.lowagie.text.List;


import me.grass.coder.Debug;


/** 
*
* @author xxj 
*/
public class jsoupTest {


	@Test
	public void testHtml() {
		StringBuffer sbf = new StringBuffer();
		sbf.append("<!doctype html>");
		sbf.append("<html lang=\"en\">");
		sbf.append(" <head>");
		sbf.append("  <meta charset=\"UTF-8\">");
		sbf.append("  <meta name=\"Generator\" content=\"EditPlus®\">");
		sbf.append("  <meta name=\"Author\" content=\"\">");
		sbf.append("  <meta name=\"Keywords\" content=\"\">");
		sbf.append("  <meta name=\"Description\" content=\"\">");
		sbf.append("  <title>Document</title>");
		sbf.append(" </head>");
		sbf.append(" <body>");
		sbf.append(" <div id=\"myDiv\"></div>");
		sbf.append(" <div auth=\"myDiv\"></div>");
		sbf.append(" <div auth-code=\"111\"><div id=\"\">0000</div></div>");
		sbf.append(" <div auth-code=\"222\">bb</div>");
		sbf.append(" <div auth-code=\"333\"><div id=\"\">5555</div></div>");
		sbf.append(" <div auth-code=\"444\">dd</div>");
		sbf.append(" </body>");
		sbf.append("</html>");
		
		//授权码
		ArrayList<String> auths= new ArrayList<String>();
		auths.add("111");
		auths.add("222");
		
		String html = sbf.toString();
		Document doc = Jsoup.parse(html);
		Elements eles=doc.select("[auth-code]");//查找有指定属性的元素
		
		Debug.printFormat("匹配:{0}",eles.size());
		if(eles==null || eles.size()==0){
			Debug.print("无内容");
			return;
		}
		
		Element e;
		Integer n=0;
		String authCode;
		for(int i=0;i<eles.size();i++){	
			e = eles.get(i);
			Debug.printFormat("{0}.{1}"
					,(++n)
					,e.outerHtml());
			authCode = e.attr("auth-code");
			//鉴权
			if(!hasAuth(authCode,auths))
				e.remove();			
		}
		Debug.print("html内容;",doc.outerHtml());
	}
	/**
	 * 鉴权
	 * @param auth
	 * @param auths
	 * @return
	 */
	boolean hasAuth(String auth,ArrayList<String> auths){
		if(auth==null || auth.isEmpty())
			return false;
		
		return auths.contains(auth);
	}
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值