2011-09-27 28 views
2

我使用JSoup解析这个HTML内容:如何在DOM对象中的两个元素之间获取文本?

<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> 

它看起来像这样的网络浏览器:

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(); 

但我不确定如何获得“上27/09/2011 -15:17”到一个变量,如果我用

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

它还包含用户名和网站?

任何帮助,将不胜感激。先谢谢了。

回答

2

您可以随时删除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 
+0

这个窍门!非常感谢:) – markbse

0

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

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

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

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

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

+1

用户名可以包含空间并导致问题,但 – markbse

+0

那么你可以获取用户名和网络为变量,那么它是没有问题的提取给定的字符串写入这样的其他数据:contentString.replace(“用户名”, “”);和contentString.replace(“web”,“”);这将从字符串中删除用户名和网络名称,然后您可以修剪字符串以删除之前和之后留下的空格。 – shake

0

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

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); 
相关问题