基础工具之jsoup工具

说明

通过工具可以很方便的对html的全文进行解析,包括内容,元素,属性搜索和获取,可以通过级联元素和级联属性进行定位获取。

引入

maven引入

XML 复制代码
<dependency>
    <groupId>com.tfgee.mv</groupId>
    <artifactId>tbtools-common-box</artifactId>
    <version>0.0.2</version>
</dependency>

使用示例

java 复制代码
/**
 * 
 */
package com.tb.commonbox.JsoupHelper;

import java.util.List;

import org.apache.commons.collections.CollectionUtils;

import com.tb.commonbox.JsoupHelper.entity.TagInfo;
import com.tb.commonbox.log.TbToolsCommonLogFactory;
import com.tb.commonbox.log.impl.TbToolsCommonLogImpl;

/**
 * 
 * 2026年2月4日
 * Think
 */
public class Demo {
	
	final static TbToolsCommonLogImpl log = TbToolsCommonLogFactory.init().getT();

	public static void main(String[] args) {
		
		String content = "<body id=\"body\"> "
				+ "<ul class=\"ul1 cl\">"
				+ 	"<li>测试1</li>"
				+ 	"<li><a href=\"连接\">点击</a></li>"
				+ 	"<li><a href=\"连接12\">点击2</a></li>"
				+ "</ul> "
				+ "<ul class=\"ul2 cl\">"
				+ 	"<li>测试2<li>"
				+ 	"<li><a href=\"连接\">点击</a></li>"
				+ 	"<li><a href=\"连接22\">点击2</a></li>"
				+ "</ul> "
				+ "</body>";
		
		//根据id取内容
		String body = JsoupHelper.getContentById(content, "body");
		log.log(body);
		
		/**
		 * 示例1
		 */
		log.log(">>>>>>>>>>>>>>>示例1 ");
		TagInfo tagInfo = new TagInfo();
		tagInfo.setTagName("li");
		tagInfo.parent().setTagName("ul").addAttr("class", "ul1 cl");
		
		List<TagInfo> tagInfos = JsoupHelper.getContentByTag(content, tagInfo);
		if (CollectionUtils.isEmpty(tagInfos)) {
			log.error("未找到内容");
		}else {
			tagInfos.stream().forEach(x->{

				log.log("匹配标签:"+x.getTagName());
				log.log("匹配的包裹文本:"+x.getContent());
				
			});
		}
		
		/**
		 * 示例2
		 */
		log.log(">>>>>>>>>>>>>>>示例2 ");
		TagInfo tagInfo2 = new TagInfo();
		tagInfo2.setTagName("a").setContent("点击2");;
		tagInfo2.parent().setTagName("li");
		tagInfo2.parent().parent().setTagName("ul").addAttr("class", "ul2 cl");
		
		List<TagInfo> tagInfos2 = JsoupHelper.getContentByTag(content, tagInfo2);
		if (CollectionUtils.isEmpty(tagInfos2)) {
			log.error("未找到内容");
		}else {
			tagInfos2.stream().forEach(x->{

				log.log("匹配标签:"+x.getTagName());
				log.log("匹配的包裹文本:"+x.getContent());
				log.log("匹配标签的属性:"+x.getAttrs().get("href"));
			});
		}
	}
}

结果示例

log:<ul class="ul1 cl">

<li>测试1</li>

<li><a href="连接">点击</a></li>

<li><a href="连接12">点击2</a></li>

</ul>

<ul class="ul2 cl">

<li>测试2</li>

<li></li>

<li><a href="连接">点击</a></li>

<li><a href="连接22">点击2</a></li>

</ul>

log:>>>>>>>>>>>>>>>示例1

log:匹配标签:li

log:匹配的包裹文本:测试1

log:匹配标签:li

log:匹配的包裹文本:<a href="连接">点击</a>

log:匹配标签:li

log:匹配的包裹文本:<a href="连接12">点击2</a>

log:>>>>>>>>>>>>>>>示例2

log:匹配标签:a

log:匹配的包裹文本:点击2

log:匹配标签的属性:连接22

相关推荐
菜鸡儿齐1 天前
Unsafe方法学习
java·python·学习
汤姆yu1 天前
IDEA接入Claude Code保姆级教程(Windows专属+衔接前置安装)
java·windows·intellij-idea·openclaw·openclasw安装
prince051 天前
用户积分系统怎么设计
java·大数据·数据库
96771 天前
理解IOC控制反转和spring容器,@Autowired的参数的作用
java·sql·spring
SY_FC1 天前
实现一个父组件引入了子组件,跳转到其他页面,其他页面返回回来重新加载子组件函数
java·前端·javascript
耀耀_很无聊1 天前
09_Jenkins安装JDK环境
java·运维·jenkins
ノBye~1 天前
Centos7.6 Docker安装redis(带密码 + 持久化)
java·redis·docker
黑臂麒麟1 天前
openYuanrong:多语言运行时独立部署以库集成简化 Serverless 架构 & 拓扑感知调度:提升函数运行时性能
java·架构·serverless·openyuanrong
XiaoLeisj1 天前
Android Jetpack 页面架构实战:从 LiveData、ViewModel 到 DataBinding 的生命周期管理与数据绑定
android·java·架构·android jetpack·livedata·viewmodel·databinding
⑩-1 天前
为什么要用消息队列?使用场景?
java·rabbitmq