12

我想使用 jsoup 在每个标签之后提取一个文本。有什么方法可以直接选择它还是我必须对整个事情执行 .substring ?

<div>
<a href="#"> I don't want this text </a> 
**I want to retrieve this text**
</div>
4

4 回答 4

29
public static void main(String... args) throws IOException {

    Document document = Jsoup.parse("<div>"
            + "<a href=\"#\"> I don't want this text </a>"
            + "**I want to retrieve this text**" + "</div>");

    Element a = document.select("a").first();

    Node node = a.nextSibling();
    System.out.println(node.toString());
}

输出

**I want to retrieve this text**
于 2013-04-25T16:04:44.190 回答
0

是的你可以。

  1. 首先获取 html <div>,然后使用选择它的 html.html()
  2. 获取<a>元素,并获取它的 html
  3. 获取<a>元素 html的长度
  4. 排除第一部分。
于 2013-04-25T16:05:02.160 回答
0

尽管提供了解决方向,但我认为上述答案缺乏普遍性。

nextSibling()在 html 结构更改时无法使用。

当我参考 Jsoup api 时,我发现了一个名为 的方法textNodes(),它可以从这个元素中获取文本节点的列表。

public static String getTextAfterTag(Element ele) {
  String text = "";
  for(TextNode node: ele.textNodes()) {
    text += node.text();
  }
  return text;
}

希望有所帮助。

于 2016-09-26T09:10:40.317 回答
0
   Document doc = Jsoup.parse("<div>"
            + "<a href=\"#\"> I don't want this text </a>"
            + "**I want to retrieve this text**" + "</div>"); 

   Elements tags = doc.getElementsByTag("a");

   for(Element tag : tags) {
      System.out.println(tag.text());
   }
于 2018-08-09T10:45:45.223 回答