我有一部分HTML文件,格式如下:
<h6 class="uiStreamMessage" data-ft="_____">
<span class="messageBody" data-ft="____"> Welcome
</span>
</h6>
在文件中,还有其他span类。但是我想获取所有'messageBody'的文本,只会插入到数据库中。
我试过了:
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文件中的嵌套范围:
<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>
而且有时候'messageBody'范围内还有另一个跨度。如何在“messageBody”范围内获取所有文本?
答案 0 :(得分:6)
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());
}
对于facebook页面https://www.facebook.com/pages/The-Nanyang-Chronicle/141387533074:
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());
}
答案 1 :(得分:3)
不确定为什么它不适合你。这是我的代码。它将Welcome
打印到控制台。
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());
}
这与你所拥有的代码基本相同,所以在这里必须有其他的东西。