如何使用 Jsoup 从 HTML 内容中获取 CSS 样式属性

How to get the CSS style attribute from HTML content using Jsoup

提问人:Kavi Chinna 提问时间:4/13/2023 最后编辑:samabcdeKavi Chinna 更新时间:4/19/2023 访问量:235

问:

我正在尝试使用 Jsoup 从 HTML div 标签中获取 Style 属性。看下面是我的div标签。

<div id="badge" class="er-badge" style="width: 576px; height: 369px; background: url(&quot;http://localhost:1020/er/ERImg/firmUploads/13854/LogoImg4.png&quot;) 0% 0% / cover no-repeat; z-index: 1; position: relative;" tabindex="0" data-preview-purposes="checked">

从这个 div 标签样式中,我只想提取属性。我可以使用下面的代码获取整个样式属性background:

String style = Element.attr("style");

但是,我只想从中获取背景属性值。是否可以使用 Jsoup 或 Please tell 任何其他简单的方法来提取属性。 提前致谢。

java jsoup html css 解析

评论


答:

0赞 samabcde 4/13/2023 #1

很高兴看到这个问题,而不是有人试图使用正则表达式手动解析。

就像我们不应该自己解析html一样,手动解析CSS也是不可取的。

已经有可用的库 - cssparser htmlunit-cssparser 来完成这项工作。 我们可以得到如下的CSS值:background

import org.htmlunit.cssparser.dom.CSSStyleDeclarationImpl;
import org.htmlunit.cssparser.parser.CSSOMParser;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Element;

import java.io.IOException;

public class ParseStyle {
    public static void main(String[] args) throws IOException {
        Element e = Jsoup.parseBodyFragment("""
                <div id="badge" class="er-badge" style="width: 576px; height: 369px; background: url(&quot;http://localhost:1020/er/ERImg/firmUploads/13854/LogoImg4.png&quot;) 0% 0% / cover no-repeat; z-index: 1; position: relative;" tabindex="0" data-preview-purposes="checked"> 
                 """);
        String style = e.select("div").attr("style");
        CSSOMParser parser = new CSSOMParser();
        CSSStyleDeclarationImpl decl = parser.parseStyleDeclaration(style);
        System.out.println(decl.getPropertyCSSValue("background"));
    }
}

评论

0赞 Kavi Chinna 4/14/2023
samabcde - 感谢您的建议,我尝试实现代码,但我看不到新的 SACParserCSS3(),我只能导入新的 SACParser()。我无法在我的应用程序中使用 SACParserCSS3。我正在使用 maven。
0赞 samabcde 4/14/2023
您使用的是 0.9.30 版本吗?mvnrepository.com/artifact/net.sourceforge.cssparser/cssparser/......
0赞 Kavi Chinna 4/14/2023
版本 0.9.23...当我提取该 jar 时,我可以在该 Jar 文件中看到 SACParserCSS3.class。那为什么我不能用它呢?
0赞 samabcde 4/17/2023
我看不出使用这两个版本有任何问题,我找到了一个更积极维护的 css 解析库并更新了我的答案,看看它是否适合您。
0赞 RBRi 4/19/2023
编辑后的代码使用 mvnrepository.com/artifact/org.htmlunit/htmlunit-cssparser