如何通过HTML内容在Jsoup中选取元素?是否有变通方案?
用Jsoup选取包含
LOCATION: 的元素解决方案 嘿,我来帮你搞定这个问题!你遇到的核心点是 这个HTML实体在Jsoup解析后会被转换成对应的Unicode非换行空格(\u00A0),直接用普通空格匹配肯定找不到,下面给你几个可行的方案:
方案一:使用:contains()选择器精准匹配
因为Jsoup会把 解析为\u00A0,所以可以直接在:contains()里用这个字符来匹配:
// 解析文档后执行 Elements targetElements = doc.select(":contains(LOCATION:\u00A0)");
这个方法简单直接,适合你确定文本里就是 而非普通空格的场景。
方案二:用正则匹配兼容多种空白符
如果页面里可能混合了普通空格和 ,或者你想更灵活匹配,建议遍历元素并用正则检查文本:
Elements allElements = doc.getAllElements(); List<Element> resultElements = new ArrayList<>(); // 正则匹配LOCATION:后面跟任意空白符(包括\u00A0和普通空格) Pattern locationPattern = Pattern.compile("LOCATION:\\s", Pattern.CASE_INSENSITIVE); for (Element elem : allElements) { if (locationPattern.matcher(elem.text()).find()) { resultElements.add(elem); } }
这里的\s正则符号会匹配所有空白字符,完美覆盖 和普通空格的情况。
方案三:缩小标签范围提升效率
如果你知道目标文本所在的标签类型(比如<span>、<div>),可以先限定标签再匹配,这样不用遍历整个文档的所有元素,效率更高:
// 假设文本在<span>标签内 Elements elements = doc.select("span:contains(LOCATION:\u00A0)");
额外提示
如果目标文本被嵌套在子标签里(比如<div>LOCATION: <span>Beijing</span></div>),elem.text()会自动合并所有子元素的文本内容,所以上述方法依然能正常匹配到。
内容的提问来源于stack exchange,提问作者Neeraj Kumar
相关产品推荐
相关产品推荐

