您的位置:首页 > 编程语言 > Java开发

java-jsoup-解析html文本

2017-05-05 09:42 351 查看
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);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: