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

如何查找HTML属性中嵌套的自定义元素?

解决Jsoup无法查找属性内嵌套元素的问题

这问题我之前也碰到过!核心原因是你要找的<custom:test>并不是真正的DOM元素——它只是input按钮value属性里的一段文本内容,Jsoup解析原始HTML后,只会把它当作字符串存在属性里,不会把它解析成独立的节点,所以用常规的元素选择器自然找不到。

下面是具体的解决步骤:

步骤1:提取目标属性的内容

首先需要先定位到包含目标文本的input元素,然后取出它的value属性值:

String input = readFileAsString(filePath);
Document doc = Jsoup.parse(input);
// 找到对应的input按钮
Element inputButton = doc.selectFirst("input[type=button]");
// 获取value属性里的内容
String nestedContent = inputButton.attr("value");

步骤2:把属性内容当作独立的HTML/XML解析

接下来,把提取到的nestedContent当作一段新的HTML(或XML)内容,用Jsoup重新解析,这样里面的<custom:test>就会被识别成DOM元素了:

// 用XML解析器处理更适合这种自定义标签场景
Document innerDoc = Jsoup.parse(nestedContent, "", Parser.xmlParser());
// 现在就可以正常查找custom:test元素了
Elements messageEls = innerDoc.select("custom|test");

步骤3:验证结果并获取属性值

最后可以检查是否找到元素,并提取它的属性:

if (!messageEls.isEmpty()) {
    String codeAttr = messageEls.first().attr("code");
    System.out.println(codeAttr); // 会输出"key"
}

备选方案:如果命名空间选择器不生效

如果遇到命名空间相关的问题,也可以直接通过标签名来筛选:

Elements messageEls = innerDoc.select("*").stream()
    .filter(element -> element.tagName().equals("custom:test"))
    .collect(Collectors.toCollection(Elements::new));

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:37:14