如何使用 JSOUP 通过 class 名称的一部分解析 html?

How to parse html by part of a class name with JSOUP?

我想买一块 html,比如:

<tr class="myclass-1234" rel="5678">
    <td class="lst top">foo 1</td>
    <td class="lst top">foo 2</td>
    <td class="lst top">foo-5678</td>
    <td class="lst top nw" style="text-align:right;">
        <span class="nw">1.00</span> foo
    </td>
    <td class="top">01.05.2015</td>
</tr>

我对 JSOUP 完全陌生,首先想到的是通过 class 名称获取它,但是,数字 1234 是动态生成的。有没有办法通过 class 名称的一部分获取它或者有更好的方法?

doc.select("tr[class~=myclass.*]");

将 select div class 属性的内容以 myclass.

开头的任何内容

假设一个简单的 html 包含两个 tr,但只有一个 tr 具有您提到的 class,此代码显示如何使用 CSS 选择器获取 tr:

CSS 选择器 tr[class^=myclass] 解释:

Select 具有 class 属性且以 myclass:

开头的 "tr" 类型的所有元素
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.select.Elements;

public class Example {
  public static void main(String[] args) {
    String html = "<html><body><table><tr class=\"myclass-1234\" rel=\"5678\">"
      + "<td class=\"lst top\">foo 1</td>"
      + "<td class=\"lst top\">foo 2</td>"
      + "<td class=\"lst top\">foo-5678</td>"
      + "<td class=\"lst top nw\" style=\"text-align:right;\">"
      + "<span class=\"nw\">1.00</span> foo"
      + "</td>"
      + "<td class=\"top\">01.05.2015</td>"
      + "</tr><tr><td>Not to be selected</td></tr></table></body></html>";

    Document doc = Jsoup.parse(html);
    Elements selectAllTr = doc.select("tr");
    // Should be 2
    System.out.println("tr elements in html: " + selectAllTr.size());

    Elements trWithStartingClassMyClass = doc.select("tr[class^=myclass]");
    // Should be 1
    System.out.println("tr elements with class \"myclass*\" in html: " + trWithStartingClassMyClass.size());
    System.out.println(trWithStartingClassMyClass);

  }

}