jПри получении текста из класса <span> - PullRequest
4 голосов
/ 16 марта 2012

У меня есть часть файла 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");

Оба не работают. Я не мог найти какие-либо решения из других. Пожалуйста, помогите.

** EDIT

Я понял, что это вложенный диапазон в 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?

Ответы [ 2 ]

6 голосов
/ 17 марта 2012
 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());
    }
3 голосов
/ 16 марта 2012

Не уверен, почему это не работает для вас. Вот мой код Он печатает 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());
}

По сути, это тот же код, что и у вас, поэтому здесь должно быть что-то еще.

...