根据以下元素标准输出文本

时间:2016-08-22 04:11:01

标签: jsoup

<div class="item-container">
    <h4 class="title">Item 1</h4>
    <h4 class="impact"><i class="exclamation point"></i>Impact:High</h4>
</div>


<div class="item-container">
    <h4 class="title">Item 2</h4>
</div>

我需要一个jsoup大师。

我只想抓住文本&#34;项目1&#34; (只有h4&#39; s另一个班级&#34;影响&#34;紧随其后)。我该怎么做?

到目前为止,我只能从正确的类中获取所有h4,但无法根据周围元素过滤输出:

import java.io.File;
import java.io.IOException;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.select.Elements;

public class GetItem {

public static void main(String[] args) throws IOException {

    File input = new File("D:\\html.html");
    Document doc = Jsoup.parse(input, "UTF-8");

    Elements div = doc.select("div.item-container");
    Elements h4 = doc.select("div.item-container > h4.title");

    for (int i = 0; i < h4.size(); i++) {
        System.out.println("Item: " + h4.get(i).text());
    }
  }
}

1 个答案:

答案 0 :(得分:1)

您可以使用以下代码(我已经使用Jsoup 1.9.2对其进行了测试):

File input = new File("D:\\html.html");
Document doc = Jsoup.parse(input, "UTF-8");
Elements h4 = doc.select("div.item-container > h4.title");

for (Element e : h4) {
    if (e.nextSibling() != null && e.nextElementSibling().hasClass("impact")) {
        System.out.println("Item: " + e.text());
}

我们的想法是像你一样获得所有h4元素,如果它有兄弟,则测试它们中的每一个,如果是的话 - 如果兄弟姐妹有类impact