Java jSoup从<;获取文本;span>;班

Java jSoup从<;获取文本;span>;班,java,parsing,jsoup,Java,Parsing,Jsoup,我有一部分HTML文件的格式如下: 欢迎 在该文件中,还有其他span类。但我只想获取所有“messageBody”span的文本,它将被插入数据库 我试过: Elements links = doc.select("span.messageBody"); for (Element link : links) { message = link.text(); // codes to insert into DB } 甚至 Elements links = doc.sel

我有一部分HTML文件的格式如下:


欢迎
在该文件中,还有其他span类。但我只想获取所有“messageBody”span的文本,它将被插入数据库

我试过:

Elements links = doc.select("span.messageBody");
for (Element link : links) {
     message = link.text();
     // codes to insert into DB
}
甚至

Elements links = doc.select("h6.uiStreamMessage span.messageBody");
两者都不起作用。我从别处找不到任何解决办法。 请帮忙

**编辑

我意识到它是html文件中的嵌套跨距:


扭曲气球

而且只有在“messageBody”范围内有时才有另一个范围。如何获取“messageBody”范围内的所有文本?

不知道为什么它不适合您。这是我的密码。它将
欢迎
打印到控制台

String html = "<h6 class=\"uiStreamMessage\" data-ft=\"_____\">" + 
    "<span class=\"messageBody\" data-ft=\"____\"> Welcome</span>" +
    "</h6>";

Document doc = Jsoup.parse(html);
for (Element e : doc.select("span.messageBody")) {
    System.out.println(e.text());
}
String html=”“+
“欢迎”+
"";
Document doc=Jsoup.parse(html);
对于(元素e:doc.select(“span.messageBody”)){
System.out.println(e.text());
}
这与您拥有的代码基本相同,因此这里肯定有其他东西在起作用。

String html=“Twisted ballogs”;
 String html = "<h6 class='uiStreamMessage' data-ft=''><span class='messageBody' data-ft=''>Twisted<a href='http://'><span>http://</span><span class='word_break'></span>www.tb.net/</a> Balloons</span></h6>";
 Document doc = Jsoup.parse(html);
 Elements elements = doc.select("h6.uiStreamMessage > span.messageBody");
 for (Element e : elements) {
      System.out.println("All text:" + e.text());
      System.out.println("Only messageBody text:" + e.ownText());
}
Document doc=Jsoup.parse(html); Elements=doc.select(“h6.uiStreamMessage>span.messageBody”); 对于(元素e:元素){ System.out.println(“所有文本:+e.text()); System.out.println(“仅messageBody文本:+e.ownText()); }
对于facebook页面:

试试看{
Document doc=Jsoup.connect(“https://www.facebook.com/pages/The-Nanyang-Chronicle/141387533074)超时(0.get();
元素=文件选择(“代码隐藏元素”);
对于(元素e:元素){
字符串eHtml=e.html().replace(“,”);
文档eWIthoutComment=Jsoup.parse(eHtml);
Elements elem=eWIthoutComment.select(“h6.uiStreamMessage>span.messageBody”);
对于(元素eb:elem){
System.out.println(eb.text());
}
}
}捕获(IOEX异常){
System.err.println(“错误:+ex.getMessage());
}

让我问你一个问题,“消息”的内容是什么?您是否每次都尝试记录它?“消息”为空。我有一些“println()”,只要在“for”循环之后,它们就不会打印任何内容。好的,在循环之后,“message”应该只有最后一个span.messageBody文本。在循环之后使用“message”是个坏主意。如果你需要的话,也许你应该把这些信息储存在一个列表里谢谢,我会记住的。然而,我已经意识到哪里出了问题。我已经编辑了这个问题,请看一看。使用您发布的最新html,您试图检索的确切文本是什么?那html真是一团糟。我已经尝试了上面的代码,它对我来说也很有效。我实际上是在传递一个从互联网上“复制”的html文件。它不起作用,但对另一个html文件起作用。我已经编辑了这个问题,请看一看,看看你是否能帮我。谢谢我试过上面的方法,效果很好。但是当我试图输入html文件并从中提取数据时,它不起作用。如果我有多个呢?在答案中可以看到first()方法。这是第一次出现。相反,不要使用first(),而是迭代元素。检查编辑答案。非常感谢。我知道它应该可以工作,但是我认为fb页面中的html标记太复杂了,这就是为什么当我输入html时它不能工作的原因。你能帮我吗?我能帮你什么?新问题是什么?问题是源代码位于html注释之间,选择器不工作。
try {
        Document doc = Jsoup.connect("https://www.facebook.com/pages/The-Nanyang-Chronicle/141387533074").timeout(0).get();

        Elements elements = doc.select("code.hidden_elem");
        for (Element e : elements) {
            String eHtml = e.html().replace("<!--", "").replace("-->", "");
            Document eWIthoutComment = Jsoup.parse(eHtml);
            Elements elem = eWIthoutComment.select("h6.uiStreamMessage >span.messageBody");
            for (Element eb : elem) {
                System.out.println(eb.text());                   
            }
        }
    } catch (IOException ex) {
        System.err.println("Error:" + ex.getMessage());
    }