java-jsoup-解析html文本

xiaoxiao2021-02-27  167

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); } }
转载请注明原文地址: https://www.6miu.com/read-14530.html

最新回复(0)