Разбор HTML-таблицы Java (Android) в базе данных (SQLite) - PullRequest
0 голосов
/ 13 июня 2011

Я искал повсюду в течение нескольких дней, сейчас пытаюсь найти ответ на следующую проблему. Я довольно новичок в программировании на Java и Android и учился в основном из сценариев копирования-вставки-редактирования, но, несмотря на то, что вокруг было несколько учебных пособий, я действительно борюсь с этим.

Я попробовал htmlcleaner в качестве парсера, и я уверен, что я близко, но просто не могу понять это правильно.

Я пытаюсь проанализировать таблицу значений на веб-сайте (т.е. <TR>TD,TD,TD,TD</TR>) в стандартную базу данных Android SQLite. Таким образом, каждая строка таблицы будет строкой в ​​БД.

Теоретически это должно быть довольно просто, но меня засыпают разными методами, и я не понимаю простого, чистого способа сделать это.

Кто-нибудь может помочь? Пожалуйста, не указывайте мне на htmlparser или неспецифическое руководство, потому что я работал над этим целую вечность и не могу управлять решением.

Табличные значения, которые я пытаюсь проанализировать, находятся здесь: Команды и значения

EDIT :::

Ладно, я думаю, что приближаюсь, используя JSoup. Я могу получить значение из тега [td] и поместить его в строку. Однако как я могу адаптировать следующий код так, чтобы каждая строка (то есть в каждом [tr]) повторялась для каждого 'for', а каждое значение [td] помещалось в массив String?

public class GetTable extends Activity {

static String hello;


@Override
public void onCreate(Bundle savedInstanceState) {
   super.onCreate(savedInstanceState);
    setContentView(R.layout.testlayout);
try {
    populateTexts();
} catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}
}

    private void populateTexts() throws IOException{
    String url =     "http://news.bbc.co.uk/mobile/bbc_sport/rugby/competition/ru100/table/index.shtml?context=cps_ukfs";

    Document doc = Jsoup.connect(url).get();
  Elements links = doc.select("td");


    for (Element link : links) {
        hello = link.text();
        TextView twittertext10 = (TextView)findViewById(R.id.testView1);
        twittertext10.setText(hello);
    }
    }
}

Ответы [ 2 ]

2 голосов
/ 14 июня 2011

Решение заключается в следующем. Я вывожу базу данных в список, чтобы показать, что у меня есть все правильные данные.

public class GetTable extends ListActivity {

static String team;
static int played;
static int won;
static int drew;
static int points;
private TableDbAdapter mDbHelper;
static int position = 0;


@Override
public void onCreate(Bundle savedInstanceState) {
   super.onCreate(savedInstanceState);
    setContentView(R.layout.testlayout);
    mDbHelper = new TableDbAdapter(this);
       mDbHelper.open();
    mDbHelper.clearTable();
try {
    populateTexts();
} catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}
populateList();
}

    private void populateTexts() throws IOException{
    String url =     "http://news.bbc.co.uk/mobile/bbc_sport/rugby/competition/ru100/table/index.shtml?    context=cps_ukfs";

    Document doc = Jsoup.connect(url).get();

    //

  Elements rows = doc.select("table[class=tblResults teamTable] tr:gt(0):lt(13)");

        String s[] = new String[rows.size()];
        for(Element row : rows){
            s[0] = row.child(0).text();
            s[1] = row.child(1).text();
            s[2] = row.child(2).text();
            s[3] = row.child(3).text();
            s[4] = row.child(4).text();

        team = s[0];
        if (s[1] !=""){
        played = Integer.parseInt(s[1]);}
        else played = 0;
        if (s[2] !=""){
        won = Integer.parseInt(s[2]);}
        else won = 0;
        if (s[3] !=""){
        drew = Integer.parseInt(s[3]);}
        else drew = 0;
        if (s[4] !=""){
        points = Integer.parseInt(s[4]);}
        else points = 0;

        position ++;


    // sql insert
       mDbHelper.createTableRow(position, team, played, won, drew, points);



    }
    }

    private void populateList() {
           // Get all of the fixtures from the database and create the item list
           Cursor c = mDbHelper.fetchWholeTable();
           startManagingCursor(c);

           String[] from = new String[] { TableDbAdapter.KEY_POSITION, TableDbAdapter.KEY_TEAM, TableDbAdapter.KEY_PLAYED, TableDbAdapter.KEY_WINS, TableDbAdapter.KEY_DREW, TableDbAdapter.KEY_POINTS};
           int[] to = new int[] { R.id.fixtextlist, R.id.fixtextlistkotime, R.id.fixtextlisthome, R.id.fixtextlisths, R.id.fixtextlistas, R.id.fixtextlistaway};

           // Now create an array adapter and set it to display using our row
           SimpleCursorAdapter table =
               new SimpleCursorAdapter(this, R.layout.fixlist_item, c, from, to);
           setListAdapter(table);




       }
}
0 голосов
/ 14 июня 2011

Возможно, вам лучше всего использовать SAX или какой-либо другой анализатор XML для анализа ваших табличных данных, затем вы используете класс SQLIteDatabaseHelper для создания таблицы и вставки ваших данных. Если у вас есть более конкретный вопрос, я постараюсь дать более конкретный ответ: -)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...