如何解决Jsoup解析HTML后标签转义导致无法查找元素的问题?
解决Jsoup解析含自定义标签HTML时标签被转义的问题
问题重现
你的原始HTML内容:
<html> <title><s:message code="test" /></title> </html>
用默认Jsoup解析代码:
String input = readFileAsString(filePath); Document doc = Jsoup.parse(input); Elements messageEls = doc.select("s|message");
解析后<title>里的<s:message>被转义成了<s:message code="test" />,导致无法通过select找到目标元素。
原因分析
Jsoup默认的HTML解析器严格遵循HTML规范:<title>元素的内容属于纯文本范畴,其中的特殊字符(比如<、>)会被自动转义为HTML实体,避免被误判为HTML标签。但你的场景里,<title>内是Struts自定义标签,这不符合标准HTML结构,所以默认解析逻辑不适用。
解决方案:使用XML解析模式
Jsoup提供了XML解析器,它会把整个内容当作XML文档处理,不会转义元素内的标签字符,能正确识别自定义标签。修改代码如下:
String input = readFileAsString(filePath); // 使用XML解析器替代默认HTML解析器 Document doc = Jsoup.parse(input, "", Parser.xmlParser()); Elements messageEls = doc.select("s|message");
这样解析后,<s:message code="test" />会被当作一个合法的XML元素,你就能通过select("s|message")正常获取到它了。
补充说明
如果你的内容大部分是标准HTML,只有局部包含自定义标签,也可以先提取<title>的文本内容,再对这段文本单独用XML解析器处理,但这种方式不如直接用全局XML解析简洁高效,推荐优先使用前者。
内容的提问来源于stack exchange,提问作者emilly
相关产品推荐
相关产品推荐

