Java 使用jsoup检索html内联样式属性值

Java 使用jsoup检索html内联样式属性值,java,html,jsoup,Java,Html,Jsoup,有人帮我用jsoup检索本例中文本对齐样式的值吗 <th style="text-align:right">4389</th> 4389 在这里,我想得到正确的值 谢谢大家! 您可以检索元素的style属性,然后按:将其拆分 例如: final String html=“4389”; Document doc=Jsoup.parse(html,“,Parser.xmlParser());//使用默认html解析器可能会删除style属性 元素th=doc.select

有人帮我用jsoup检索本例中文本对齐样式的值吗

<th style="text-align:right">4389</th>
4389
在这里,我想得到正确的值


谢谢大家!

您可以检索元素的
style
属性,然后按
将其拆分

例如:

final String html=“4389”;
Document doc=Jsoup.parse(html,“,Parser.xmlParser());//使用默认html解析器可能会删除style属性
元素th=doc.select(“th[样式]”).first();
字符串样式=th.attr(“样式”);//你可以把这两行放在一起
String styleValue=style.split(“:”[1];//TODO:如果设置了值,则插入检查
//输出结果
系统输出打印项次(th);
System.out.println(样式);
System.out.println(styleValue);
输出:

4389
文本对齐:右对齐
正确的

提取样式属性的另一种方法是:

public Map<String, String> getStyleMap(Element element) {
    Map<String, String> keymaps = new HashMap<>();
    if (!element.hasAttr("style")) {
        return keymaps;
    }
    String styleStr = element.attr("style"); // => margin-top:-80px !important;color:#fcc;border-bottom:1px solid #ccc; background-color: #333; text-align:center
    String[] keys = styleStr.split(":");
    String[] split;
    if (keys.length > 1) {
        for (int i = 0; i < keys.length; i++) {
            if (i % 2 != 0) {
                split = keys[i].split(";");
                if (split.length == 1) break;
                keymaps.put(split[1].trim(), keys[i + 1].split(";")[0].trim());
            } else {
                split = keys[i].split(";");
                if (i + 1 == keys.length) break;
                keymaps.put(keys[i].split(";")[split.length - 1].trim(), keys[i + 1].split(";")[0].trim());
            }
        }
    }
    return keymaps;
}

向我们展示您到目前为止所实施的内容。我想知道我的表达式是否与
Elements elt=doc.select(“[style*='text-align']”)一起工作;System.out.println(elt.size())这是我最终设想的解决方案,但方式不同。感谢@wartai的帮助。这再次是样式值的字符串操作。当附加多个样式时,这将不起作用。在jsoup中是否有一种方法可以将单个样式作为元素,以便innerStyle.attr(“text:align”)返回“right”?@SaravanaPrakash是的,这似乎是一项未完成的工作。我的意思是,设计一个正则表达式很容易,它将提取多个“正确格式”的键值,但JSoup似乎希望将其作为标准处理。。。例如,我现在想知道我必须去哪里寻找,以找出哪些字符是合法允许作为“键”和“值”的;假设您可以在冒号的任一侧使用任意空格,等等:这些细节应该由JSoup包处理。。。
<th style="text-align:right">4389</th>
text-align:right
right
public Map<String, String> getStyleMap(Element element) {
    Map<String, String> keymaps = new HashMap<>();
    if (!element.hasAttr("style")) {
        return keymaps;
    }
    String styleStr = element.attr("style"); // => margin-top:-80px !important;color:#fcc;border-bottom:1px solid #ccc; background-color: #333; text-align:center
    String[] keys = styleStr.split(":");
    String[] split;
    if (keys.length > 1) {
        for (int i = 0; i < keys.length; i++) {
            if (i % 2 != 0) {
                split = keys[i].split(";");
                if (split.length == 1) break;
                keymaps.put(split[1].trim(), keys[i + 1].split(";")[0].trim());
            } else {
                split = keys[i].split(";");
                if (i + 1 == keys.length) break;
                keymaps.put(keys[i].split(";")[split.length - 1].trim(), keys[i + 1].split(";")[0].trim());
            }
        }
    }
    return keymaps;
}
0 = {HashMap$Node@5713} "background-color" -> "#333"
1 = {HashMap$Node@5714} "color" -> "#fcc"
2 = {HashMap$Node@5715} "font-family" -> "'Helvetica Neue', Helvetica, Arial, sans-serif"
3 = {HashMap$Node@5716} "margin-top" -> "-80px !important"
4 = {HashMap$Node@5717} "text-align" -> "center"
public static Map<String, String[]> getStyleMap(String styleStr) {
    Map<String, String[]> keymaps = new HashMap<>();
    // margin-top:-80px !important;color:#fcc;border-bottom:1px solid #ccc; background-color: #333; text-align:center
    String[] list = styleStr.split(":|;");
    for (int i = 0; i < list.length; i+=2) {
        keymaps.put(list[i].trim(),list[i+1].trim().split(" "));
    }
    return keymaps;
}
0 = {HashMap$Node@5713} "background-color" -> ["#333"]
1 = {HashMap$Node@5714} "color" -> ["#fcc"]
2 = {HashMap$Node@5716} "margin-top" -> ["-80px","!important"]
3 = {HashMap$Node@5717} "text-align" -> ["center"]