使用jsoup获取html内联样式属性值

时间:2013-11-13 11:13:54

标签: java html css jsoup

我希望你能帮助我... ... 首先,一些HTML代码......

<div style="font-size:12px; FONT-FAMILY: VERDANA, ARIAL; font-weight:bold; position: absolute; background-color:#FFFFFF; border-color:#868686; border-style:solid; border-left-width:1px; border-top-width:1px; border-right-width:0px; border-bottom-width:0px; top: 0px; left:2px; width:55px;height:30px; padding-left : 0 px;padding-top : 5px;"><img src="../../server/img/spacer.gif" alt="" width="10" height="1">Zeit</div>
<div style="font-size:12px; FONT-FAMILY: Tahoma, VERDANA, ARIAL; font-weight:bold; position: absolute; top: 0px; background-color:#FFFFFF; border-color:#868686; border-style:solid; border-left-width:1px; border-top-width:1px; border-bottom-width:0px;border-right-width:1px;left:57px;width:140px;height:30px; padding-left:0px; padding-top:5px;"><img src="../../server/img/spacer.gif" alt="" width="10" height="1">Montag</div>
<div style="font-size:12px; FONT-FAMILY: Tahoma, VERDANA, ARIAL; font-weight:bold; position: absolute; top: 0px; background-color:#FFFFFF; border-color:#868686; border-style:solid; border-left-width:1px; border-top-width:1px; border-bottom-width:0px;border-right-width:1px;left:197px;width:140px;height:30px; padding-left:0px; padding-top:5px;"><img src="../../server/img/spacer.gif" alt="" width="10" height="1">Dienstag</div>
<div style="font-size:12px; FONT-FAMILY: Tahoma, VERDANA, ARIAL; font-weight:bold; position: absolute; top: 0px; background-color:#FFFFFF; border-color:#868686; border-style:solid; border-left-width:1px; border-top-width:1px; border-bottom-width:0px;border-right-width:1px;left:337px;width:140px;height:30px; padding-left:0px; padding-top:5px;"><img src="../../server/img/spacer.gif" alt="" width="10" height="1">Mittwoch</div>
<div style="font-size:12px; FONT-FAMILY: Tahoma, VERDANA, ARIAL; font-weight:bold; position: absolute; top: 0px; background-color:#FFFFFF; border-color:#868686; border-style:solid; border-left-width:1px; border-top-width:1px; border-bottom-width:0px;border-right-width:1px;left:477px;width:140px;height:30px; padding-left:0px; padding-top:5px;"><img src="../../server/img/spacer.gif" alt="" width="10" height="1">Donnerstag</div>
<div style="font-size:12px; FONT-FAMILY: Tahoma, VERDANA, ARIAL; font-weight:bold; position: absolute; top: 0px; background-color:#FFFFFF; border-color:#868686; border-style:solid; border-left-width:1px; border-top-width:1px; border-bottom-width:0px;border-right-width:1px;left:617px;width:140px;height:30px; padding-left:0px; padding-top:5px;"><img src="../../server/img/spacer.gif" alt="" width="10" height="1">Freitag</div>

我的第一个问题是看看“Montag”(=星期一)那天......到现在为止我得到了这个:

Element content = doc.getElementById("content");
Elements names = doc.select("div[style]");
for(Element elem : names){
    if(elem.text().contains("Montag")){ 
      }
}  

你认为这样可以吗?
在此之后,(在if语句中)我必须关注样式内联属性:“left:[xx] px”。
那我怎么能实现以下输出?:

Montag -> Left:57px

我希望得到你的帮助!非常感谢你花时间回答我。

1 个答案:

答案 0 :(得分:2)

你绝对可以像使用Jsoup那样找到正确的元素。

要获取属性信息,没有简单的方法只使用Jsoup来完成此操作。您可以通过调用Jsoup中的Element.attributes()方法来获取属性,但据我所知,您必须使用正则表达式匹配器来选择所需的信息。

您可以设置正则表达式前瞻和后瞻模式,以检查与您的模式匹配的出现。

Pattern p = Pattern.compile("(?<=border-right-width:1px;)(.*)(?=;width:140px;)");

此模式将查找border-right-width:1px;;width:140px;

之间的所有字符

从这里开始,下面的代码应该产生你想要的结果:

Pattern p = Pattern.compile("(?<=border-right-width:1px;)(.*)(?=;width:140px;)");
String elementInformation = "";
for (Element elem : names) {
    if (elem.text().contains("Montag")) {
        Matcher m = p.matcher(elem.attributes().toString());
        elementInformation = elem.text() + " -> ";
        while(m.find()){
            elementInformation += m.group();
        }
    }
}
System.out.println(elementInformation);

结果:

Montag -> left:57px

您可以修改for循环并解析所有元素的相同信息,但

for (Element elem : names) {
    if (!elem.text().contains("Zeit")) {
        Matcher m = p.matcher(elem.attributes().toString());
        elementInformation += "\n";
        elementInformation += elem.text() + " -> ";
        while (m.find()) {
            elementInformation += m.group();

        }
    }
}

你会得到:

Montag -> left:57px
Dienstag -> left:197px
Mittwoch -> left:337px
Donnerstag -> left:477px
Freitag -> left:617px

如果您想了解它的工作原理,请查看此正则表达式教程。

Regex Tutorial