JSOUP从p和span

时间:2016-11-10 08:14:18

标签: java html jsoup

我很难获得正确的输出。请参阅下面的HTML示例文本:

 <p><span class="v">1</span> Een psalm van David. De HEERE is mijn Herder, mij zal niets ontbreken.</p>

 <p><span class="v">2</span> Hij doet mij nederliggen in grazige weiden; Hij voert mij zachtjes aan zeer stille wateren.</p>

 <p><span class="v">3</span> Hij verkwikt mijn ziel; Hij leidt mij in het spoor der gerechtigheid, om Zijns Naams wil.</p>

我希望得到

的值 Een psalm van David。 De HEERE是mijn Herder,mij zal niets ontbreken。基于用户选择的诗歌

到目前为止,这就是我所做的:

HttpGet get = new HttpGet(url);
HttpResponse resp = client.execute(get);

String content = EntityUtils.toString(resp.getEntity());
Document doc = Jsoup.parse(content);

StringBuilder sb = new StringBuilder();

Elements passage = doc.select("p > span.v");

sb.append(passage.text() + "\n");

Elements links = doc.select(className);
for (Element link : links) {
    sb.append(link.text() + " ");
}
Log.e("ELEMENTS", "" + sb.toString());
response = sb.toString();

但我只得到这些经文。如何获得正确的输出?我很乐意感谢任何帮助。感谢。

1 个答案:

答案 0 :(得分:0)

假设你想得到第1节的段落,你可以使用:

  1. :has(selector)仅获取包含与选择器匹配的元素的元素
  2. 然后使用选择器span.v:containsOwn(1)表示您需要span vtext包含1的{​​{1}}。
  3. 最后使用ownText()来获取元素本身的文本而不是其子文本,否则如果您想要同时使用text()
  4. 所以代码可以是:

    String className = "v";
    int verse = 1;
    Element p = doc.select(String.format("p:has(span.%s:containsOwn(%d))", className, verse))
        .first();
    System.out.println(p.ownText());
    

    <强>输出:

    Een psalm van David. De HEERE is mijn Herder, mij zal niets ontbreken.
    

    如果您想获得所有段落的内容,代码可以是:

    StringBuilder sb = new StringBuilder();
    Elements paragraphs = doc.select("p:has(span.v)");
    for (Element p : paragraphs) {
        sb.append(p.ownText() + "\n");
    }
    System.out.println(sb);
    

    <强>输出:

    Een psalm van David. De HEERE is mijn Herder, mij zal niets ontbreken.
    Hij doet mij nederliggen in grazige weiden; Hij voert mij zachtjes aan zeer stille wateren.
    Hij verkwikt mijn ziel; Hij leidt mij in het spoor der gerechtigheid, om Zijns Naams wil.