转译
// 原始HTML字符串,包含一些特殊字符和实体
String html = "<html><body><h1>欢迎来到我的网站 <3</h1><p>这是一个带有特殊字符的文本: < > & ' \"</p></body></html>";
// 使用Jsoup解析HTML字符串
Document doc = Jsoup.parse(html);
// 设置输出设置,包括转义模式为EscapeMode.xhtml
OutputSettings outputSettings = doc.outputSettings();
outputSettings.escapeMode(EscapeMode.xhtml);
// 转译HTML字符串
String escapedHtml = doc.html();
// 输出转译后的HTML字符串
System.out.println("Escaped HTML:");
System.out.println(escapedHtml);
String html = "<html><body><p>这是一个带有特殊字符的文本: <p></p></body></html>";
// 使用StringEscapeUtils.unescapeHtml4方法反转译HTML实体
String unescapedHtml = StringEscapeUtils.unescapeHtml4(html);
//<html><body><p>这是一个带有特殊字符的文本: <p></p></body></html>
unescapedHtml = StringEscapeUtils.escapeHtml4(html);
String htmlEncoded = "<span><div>测试</div></span>";
String decodedHtml = Entities.unescape(htmlEncoded);
// 输出反转译后的HTML字符串
System.out.println("Unescaped HTML:");
System.out.println(unescapedHtml);
自定义标签转换
String html = "<tps>测试<tps>";
String html = "<tps>测试</tps>";
// 使用"(.*?)"来匹配任意内容(非贪婪匹配)
String regex = "<tps>(.*?)<tps>";
String regex = "<tps>(.*?)</tps>";
// 创建Pattern对象
Pattern pattern = Pattern.compile(regex);
// 创建Matcher对象
Matcher matcher = pattern.matcher(html);
if (matcher.find()) {
// 获取匹配的内容组(这里是第1组,因为我们在正则表达式中使用了())
String content = matcher.group(1);
// 使用matcher.replaceAll()方法替换匹配的内容
String replacedHtml = matcher.replaceAll("<tps>" + content + "</tps>");
System.out.println("Replaced HTML: " + replacedHtml);
} else {
System.out.println("No match found.");
}
System.out.println("<tps>测试</tps>".replaceAll("<tps>(.*?)</tps>", "<tps>$1</tps>"));
Elements commonElements = doc1.select("*").retain("div"); // 保留相同的元素
Elements onlyInDoc1 = doc1.select("*").notIn(commonElements); // 只存在于doc1中的元素
Elements onlyInDoc2 = doc2.select("*").notIn(commonElements); // 只存在于doc2中的元素
// 检查td是否有子节点且包含qts标签
if (!td.children().isEmpty() && td.getElementsByTag("qts").size() > 0) {
// 移除td中的qts标签
td.select("qts").remove();
} else if (td.children().isEmpty()) {
td.addClass("vb");
}
String html = "<html><body><p>Hello, World!</p ><p>Hello, Jsoup!</p ></body></html>";
Document doc = Jsoup.parse(html);
// 根据内容匹配HTML元素
Elements paragraphs = doc.select("p:contains(Jsoup)");
// 遍历匹配的元素,用div包裹并设置样式、class和id
for (Element paragraph : paragraphs) {
// 创建新的<div>元素
Element newDiv = doc.createElement("div");
// 设置样式、class和id
newDiv.attr("class", "myClass");
newDiv.attr("id", "myId");
//修改txt paragraph.text("Hello, Java!");
//System.out.println(p.nodeName()+"\t"+p.tagName()+"\t"+p.ownText()+"\t"+p.html());
paragraph.wrap(newDiv.outerHtml());
//paragraph.wrap("<div></div>");
}
System.out.println(doc.html());
String modifiedHtml = doc.html();
File outputHtmlFile = new File("put.html");
Files.write(outputHtmlFile.toPath(), modifiedHtml.getBytes(StandardCharsets.UTF_8));
String html = "<p>123</p>";
System.out.println("Start tag: " + getStartTag(html));
System.out.println("End tag: " + getEndTag(html));
Start tag: <p>
End tag: </p>
public static String getStartTag(String html) {
Pattern pattern = Pattern.compile("<([a-zA-Z0-9]+)[^>]*>");
Matcher matcher = pattern.matcher(html);
if (matcher.find()) {
return matcher.group(0);
}
return null;
}
public static String getEndTag(String html) {
Pattern pattern = Pattern.compile("</([a-zA-Z0-9]+)[^>]*>");
Matcher matcher = pattern.matcher(html);
if (matcher.find()) {
return matcher.group(0);
}
return null;
}
工具类操作
String text = "<tag1>内容1</tag1><tag2>内容2</tag2>";
String tagPattern = "<(.*?)>(.*?)<\\/\\1>";
Pattern pattern = Pattern.compile(tagPattern);
Matcher matcher = pattern.matcher(text);
while (matcher.find()) {
System.out.println("全容:" + matcher.group(0));
System.out.println("标签:" + matcher.group(1));
System.out.println("内容:" + matcher.group(2));
}
public String removeHtmlTags(String html) {
return html.replaceAll("<.*?>", "");
}
public static String getStartTag(String html) {
Pattern pattern = Pattern.compile("<([a-zA-Z0-9]+)[^>]*>");
Matcher matcher = pattern.matcher(html);
if (matcher.find()) {
return matcher.group(0);
}
return null;
}
public static String getEndTag(String html) {
Pattern pattern = Pattern.compile("</([a-zA-Z0-9]+)[^>]*>");
Matcher matcher = pattern.matcher(html);
if (matcher.find()) {
return matcher.group(0);
}
return null;
}
String html = "<div>测试1</div><div>测试2</div>";
// 解析HTML字符串
Document doc = Jsoup.parse(html);
// 选择所有的div元素
Elements divs = doc.body().children();
for (Element div : divs) {
// 获取div内的文本节点
TextNode textNode = div.textNodes().get(0);
// 创建新的<b>元素并添加文本节点内容
Element boldText = new Element("b");
boldText.appendChild(new TextNode(textNode.text()));
// 替换原有的文本节点为<b>元素
textNode.replaceWith(boldText);
}
// 输出处理后的HTML字符串
System.out.println(doc.html());
String html = "<div>测试1</div><div>测试2</div>";
Document doc = Jsoup.parse(html);
Elements elements = doc.body().children(); // 选择body下所有元素
for (Element element : elements) {
String content = element.html(); // 获取元素内部HTML内容
String wrappedContent = "<b>" + content + "</b>"; // 将内容用<b>标签包裹
element.html(wrappedContent); // 设置修改后的内部HTML内容
}
String modifiedHtml = doc.html(); // 获取修改后的HTML字符串
String modifiedHtml = doc.body().html(); // 获取修改后的HTML字符串只包含body下的内容和标签舍掉htmlhead等
System.out.println(modifiedHtml); // 输出修改后的HTML内容
<html>
<head></head>
<body>
<div>
<b>测试1</b>
</div>
<div>
<b>测试2</b>
</div>
</body>
</html>
String html = "<div>测试1</div><div>测试2</div>";
Document doc = Jsoup.parse(html);
Elements elements = doc.body().children(); // 选择所有元素
for (Element element : elements) {
element.wrap("<div></div>"); // 将每个元素包裹在<b>标签中
}
String modifiedHtml = doc.html(); // 获取修改后的HTML字符串
System.out.println(modifiedHtml); // 输出修改后的HTML内容
<html>
<head></head>
<body>
<div>
<div>
测试1
</div>
</div>
<div>
<div>
测试2
</div>
</div>
</body>
</html>
String html = "<html><head><title>Test</title></head><body><p>Some text <b>in bold</b> and <div>in a div</div>.</p></body></html>";
Document doc = Jsoup.parse(html);
Elements boldAndDiv = doc.select("b, div");//doc.select("b,div");
for (Element element : boldAndDiv) {
System.out.println(element.outerHtml());
}
查找td->span
String html = "<html><head></head><body><table><tr><td>A</td></tr><tr><td><span>A1</span></td></tr></table></body>"; // 替换为实际HTML内容
// 解析HTML文档
Document doc = Jsoup.parse(html);
// 选择所有的<table>元素
Elements tables = doc.select("table");
for (Element table : tables) {
// 对于每个表格,找到所有包含<span>的<td>元素
Elements tdsWithSpans = table.select("td > span"); // 获取直接子级的span
if (!tdsWithSpans.isEmpty()) {
for (Element tdWithSpan : tdsWithSpans) {
System.out.println("Found <td> containing <span>: " + tdWithSpan.html());
}
}
}
String html = "<html><head></head><body><table><tr><td><tps>测试</tps></td></tr></table></body></html>";
Document doc = Jsoup.parse(html);
// 获取所有的td元素
Elements tds = doc.select("td");
for (Element td : tds) {
// 查找td内的文本内容中包含的实体字符
String content = td.html();
//String content2 = StringEscapeUtils.unescapeHtml4(content1);
if (content.contains("<tps>")) {//content2.contains("tps")
// 将实体字符替换为实际的HTML标签,并添加类名
String decodedContent = content.replace("<tps>", "<tps class=\"ab\">").replace("</tps>", "</tps>");
td.html(decodedContent);//td.html(content2);
}
}
// 输出处理后的HTML字符串
// System.out.println(doc.html());
// System.out.println(doc.body().html());
// <table>
// <tbody>
// <tr>
// <td>
// <tps class="ab">
// 测试
// </tps></td>
// </tr>
// </tbody>
// </table>
获取table中第n个元素如tr
String html = "<table><tr><td>A1</td></tr><tr><td>1</td></tr><tr><td>1</td></tr><tr><td>1</td></tr></table>";
Document doc = Jsoup.parse(html);
// 获取table元素
Element table = doc.select("table").first();
//tr元素
Elements trs = doc.select("tr:not(:first-child)");
//Elements trs = table.select("tr:nth-child(n+2)");
// 从第二个tr开始遍历
for (int i = 0; i < trs.size(); i++) {
Element tr = trs.get(i);
System.out.println("Second and subsequent TR: " + tr.html());
}
//span替换b标签
for (Element span : spans) {
// 创建一个新的b元素
Element b = new Element(Tag.valueOf("b"), "");
// 将span的所有子节点移动到b元素中
// 处理span的所有子节点
for (Node child : span.childNodes()) {
if (child instanceof TextNode) {
// 将文本节点内容添加到b元素中
b.appendText(((TextNode) child).text());
} else {
// 其他类型的节点(如HTML标签),将其克隆后添加到b元素中
b.appendChild(child.clone());
}
// 替换原来的span为新的b元素
span.replaceWith(b);
}
}
或者
Elements spans = rORd.getElementsByTag("span");
for (Element span : spans) {
Element b = new Element(Tag.valueOf("b"), "");
b.html(span.html());
span.replaceWith(b);
}
Document document;
try {
//POST请求
System.out.println("POST 请求方式获取数据");
document = Jsoup.connect("http://bp.shijialeya.top")
.data("username", "jiale") //添加请求数据参数。
.userAgent("Mozilla AppleWebKit Chrome Safari Edg") //设置请求用户代理头。
.cookie("auth", "token") //设置请求中要发送的 cookie。
.timeout(2000) //设置超时时间
.post();
//更多的 API查看文章末尾 Connection 接口的方法
System.out.println(document);
} catch (IOException e) {
e.printStackTrace();
}
document = Jsoup.parse(file, "UTF-8");
移除标签保留内容
String html = "<div><span style='color:red;font-size:15px'>22<cts style='color:red;'>测 试</cts>555</span>123123</div>";
Document doc = Jsoup.parse(html);
// 选择所有cts元素并移除它们,同时将其内容移到其父元素下多个doc.select("span>cts,span>p");
//doc.select("span:has(>cts), span:has(>p)");
Elements ctsElements = doc.select("span>cts");
for (Element cts : ctsElements) {
Element parentSpan = cts.parent(); // 获取cts的父级span元素
if (parentSpan.hasAttr("style")) { // 判断span是否有style属性
String styleAttr = parentSpan.attr("style");
// 进行您想要的样式内容检查
if (styleAttr.contains("color:red") && styleAttr.contains("font-size:15px")) {
Node prevNode = cts.previousSibling();
Node nextNode = cts.nextSibling();
List<Node> childNodesList = new ArrayList<>(Arrays.asList(cts.childNodes().toArray(new Node[0])));
for (Node childNode : childNodesList) {
if (prevNode != null) {
prevNode.after(childNode);
} else if (nextNode == null
|| nextNode instanceof TextNode && ((TextNode) nextNode).isBlank()) {
cts.parent().prependChild(childNode);
} else {
nextNode.before(childNode);
}
}
cts.remove(); // 移除空的cts标签
}
}
}
System.out.println(doc.html());
}
移除p
String html = "<div><span style='color:red;font-size:15px'>34<p>22</p><b>22</b>3q<p>33</p></div>";
Document doc = Jsoup.parse(html);
// 选择所有的<p>标签
Elements ets = doc.select("span>p");
for (Element p : ets) {
p.remove(); // 直接移除原有的p标签
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之家整理,本文链接:https://www.bmabk.com/index.php/post/200906.html