2014-01-21 4 views
2

Я пытаюсь разобрать этот царь HTML для моего андроида приложения:JSoup - Разбираем простой HTML

<table> 
    <p> blablabla </p> 
    <p> bliblibli </p> 
</table> 
<p> Hello </p> 
<p> Hello2 </p> 
.... 
<p> Hellon </p> 
<table> 
    <p> blablabla </p> 
    <p> bliblibli </p> 
</table> 

Это легко получить внутри таблицы тега getElementsByTag («стол»), а затем getElementsByTag ("п").

Но как насчет секции «привет», где я не знаю, сколько строк есть?

Моей первой идеей было сначала прокручивать строку с помощью string.split («table»), но это король awfull.

Спасибо за помощь.

ответ

2

Это трудно с недействительными например, после JSoup разбора этих документов выглядит следующим образом:

<html> 
<head></head> 
<body> 
    <p> blablabla </p> 
    <p> bliblibli </p> 
    <table> 
    </table> 
    <p> Hello </p> 
    <p> Hello2 </p> .... 
    <p> Hellon </p> 
    <p> blablabla </p> 
    <p> bliblibli </p> 
    <table> 
    </table> 
</body> 
</html> 

Все пункты находятся на первом уровень и таблицы пусты.

Правильный пример таблицы

<table> 
    <tr> 
    <td> 
     <p> blablabla </p> 
    </td> 
    <td> 
     <p> bliblibli </p> 
    </td> 
    </tr> 
</table> 

После закрепления образца HTML вещи намного проще

public static void main(String[] args) { 

    String html = "<table><tr><td>\n" + 
      " <p> blablabla </p>\n" + 
      " <p> bliblibli </p>\n" + 
      "</td></tr></table>\n" + 
      "<p> Hello </p>\n" + 
      "<p> Hello2 </p>\n" + 
      "....\n" + 
      "<p> Hellon </p>\n" + 
      "<table><tr><td>\n" + 
      " <p> blablabla </p>\n" + 
      " <p> bliblibli </p>\n" + 
      "</td></tr></table>"; 

    Elements p1 = Jsoup.parse(html).select("body > p"); 

    System.out.println(p1.html()); 

} 

И результат

Hello 
Hello2 
Hellon 

Просто используйте комбинатора >, работает как шарм :)

parent> child: дочерние элементы, которые спускаются непосредственно от родителя, например. div.content> p находит p элементов; и тело> * находит непосредственные дочерние тела тега

+0

Спасибо. Комбинатор действительно замечательный! Вы отвечаете на вопросы, но на самом деле мой html немного сложнее. Я собираюсь изменить свой вопрос. – user1391967

+0

Нет, это не сложно, это просто ** недействительно **. 'table' должен вложить' tr' и 'td'! – MariuszS

0

Это, несомненно, поможет U

  Element content = doc.select("p").get(0); 
      content.tagName(); 
      str=content.text(); 
      Log.d("Check", str + content.tagName()); 

В этом у метод может быть зациклена прибудете() ..

Смежные вопросы