html 如何获取DOM对象中两个元素之间的文本?

daolsyd0  于 2023-01-07  发布在  其他
关注(0)|答案(3)|浏览(115)

我使用JSoup来解析这个HTML内容:

<div class="submitted">
    <strong><a title="View user profile." href="/user/1">user1</a></strong> 
    on 27/09/2011 - 15:17 
    <span class="via"><a href="/goto/002">www.google.com</a></span>
</div>

在Web浏览器中看起来如下所示:

user1 on 27/09/2011 - 15:17 www.google.com

用户名和网站可以解析为变量使用:

String user    = content.getElementsByClass("submitted").first().getElementsByTag("strong").first().text(); 
String website = content.getElementsByClass("submitted").first().getElementsByClass("via").first().text();

但我不确定如何将“on 27/09/2011 -15:17”放入变量中,如果我使用

String date = content.getElementsByClass("submitted").first().text();

它还包含用户名和网站???

cmssoen2

cmssoen21#

你总是可以像这样删除userwebsite元素(如果你不想删除操作"损坏"你的文档,你可以克隆你的submitted元素):

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

    Document content = Jsoup.parse(
      "<div class=\"submitted\">" +
      "  <strong><a title=\"View user profile.\" href=\"/user/1\">user1</a></strong>" +
      "  on 27/09/2011 - 15:17 " + 
      "  <span class=\"via\"><a href=\"/goto/002\">www.google.com</a></span>" +
      "</div> ");

    // create a clone of the element so we do not destroy the original
    Element submitted = content.getElementsByClass("submitted").first().clone();

    // remove the elements that you do not need 
    submitted.getElementsByTag("strong").remove();
    submitted.getElementsByClass("via").remove();

    // print the result (demo)
    System.out.println(submitted.text());
}
    • 产出:**
on 27/09/2011 - 15:17
vjhs03f7

vjhs03f72#

然后可以解析得到字符串。

String str[] = contentString.split(" ");

然后你可以像这样构造你想要的字符串:

String str = str[1] + " " + str[2] + " - " + str[4];

这将提取您需要的字符串。

qlckcl4x

qlckcl4x3#

选择要抓取的文本之前的元素,然后获取它的下一个兄弟节点 node(不是元素),这是一个文本节点:

Document doc = Jsoup.parse("<div class=\"submitted\">" +
  "  <strong><a title=\"View user profile.\" href=\"/user/1\">user1</a></strong>" +
  "  on 27/09/2011 - 15:17 " +
  "  <span class=\"via\"><a href=\"/goto/002\">www.google.com</a></span>" +
  "</div> ");
String str = doc.select("strong").first().nextSibling().toString().trim();
System.out.println(str);

你也可以直接向元素询问它的子文本节点和索引(尽管通过兄弟节点引用节点通常比索引更健壮):

Document doc = Jsoup.parse(
            "<div class=\"submitted\">" +
  "  <strong><a title=\"View user profile.\" href=\"/user/1\">user1</a></strong>" +
  "  on 27/09/2011 - 15:17 " +
  "  <span class=\"via\"><a href=\"/goto/002\">www.google.com</a></span>" +
  "</div> ");
String str = doc.select("div").first().textNodes().get(1).text().trim();
System.out.println(str);

相关问题