You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Jsoup如何创建自定义自闭合标签并替换原有HTML标签

实现方案

核心思路

Jsoup默认会按HTML标准修正非原生标签的格式,所以需要先调整解析和输出的配置,再做标签匹配替换,保证自定义自闭合标签不会被转成双标签。

具体实现代码

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.parser.ParseSettings;
import org.jsoup.parser.Parser;
import org.jsoup.parser.Tag;
import org.jsoup.select.Elements;

public class CustomTagReplace {
    public static void main(String[] args) {
        // 你的原始HTML内容
        String originHtml = "<body><inline id=\"inline-1\" /><p>测试段落</p><inline id=\"inline-2\" /></body>";

        // 1. 初始化解析器,保留标签和属性的大小写,不做默认修正
        Parser customParser = Parser.htmlParser();
        customParser.settings(new ParseSettings(true, true));
        Document doc = Jsoup.parse(originHtml, "", customParser);

        // 2. 筛选所有符合规则的<inline>标签
        Elements inlineTags = doc.select("inline[id^=inline-]");

        for (Element oldTag : inlineTags) {
            // 提取id中的数字部分
            String numStr = oldTag.attr("id").replaceFirst("inline-", "");

            // 3. 创建自定义自闭合标签
            Tag newTag = Tag.valueOf("abc:123", doc.outputSettings().syntax()).selfClosing();
            Element customElement = new Element(newTag, "").attr("input", numStr);

            // 替换原标签
            oldTag.replaceWith(customElement);
        }

        // 4. 配置输出规则,强制保留自闭合格式
        doc.outputSettings()
                .syntax(Document.OutputSettings.Syntax.xml)
                .prettyPrint(true); // 不需要格式化可以设为false

        // 输出结果
        System.out.println(doc.html());
    }
}

注意事项

  • 必须将输出语法设为xml,如果用默认的HTML语法,Jsoup会把非HTML原生的自闭合标签自动转为开标签,导致格式错误
  • 如果需要保留原<inline>标签的其他属性,直接遍历oldTag.attributes()批量添加到新标签即可
  • 如果自定义标签名是动态的,修改Tag.valueOf()的第一个参数即可适配

内容的提问来源于stack exchange,提问作者Diego Gutierrez

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 10:36:02