【问题标题】:Java (Android) Html Table Parsing to Database (SQLite)Java (Android) Html 表解析到数据库 (SQLite)
【发布时间】:2011-06-12 22:17:41
【问题描述】:

我已经搜索了很多天,现在试图找到以下问题的答案。我是 Java 和 Android 编程的新手,主要从复制粘贴编辑场景中学习,但尽管有一些教程,但我真的在这方面苦苦挣扎。

我已经尝试将 htmlcleaner 作为我的解析器,我确信我已经很接近了,但只是无法做到这一点。

我正在尝试将网站上的值表(即<TR>TD,TD,TD,TD</TR>)解析为标准的 Android SQLite 数据库。所以表的每一行都是数据库中的一行。

理论上这应该很简单,但我被不同的方法弄得一头雾水,不明白一个简单干净的方法。

有人可以帮忙吗?请不要将我指向 htmlparser 或非特定教程,因为我已经在这些领域工作了很长时间并且无法管理解决方案。

我要解析的表值在这里:Teams and values

编辑:::

好的,我想我正在接近使用 JSoup。我可以从 [td] 标记中获取一个值并将其放入一个字符串中。但是,如何调整以下代码,以便为每个“for”迭代每一行(即在每个 [tr] 内),并将每个 [td] 值放入一个字符串数组?

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);
    }
    }
}

【问题讨论】:

  • 你的问题在哪里更具体?显示一些代码以指示您的问题所在。我个人想不通。
  • 对不起,很难在不使问题复杂的情况下提供代码,因为我的问题是找不到正确的代码。简而言之,我正在尝试从链接中的表中获取数据(团队名称、玩过的游戏、积分等)并填充 Android SQLite 数据库。所以表中的每一行都与 SQLite 表中的每一行相同。
  • 我已经成功地从一个 iCal 文件中解析了这个,但我真的很难遍历一个 html 表并填充数据库。我已经尝试过 htmlcleaner,但我找不到一个很好的教程来展示如何填充数据库或使用结果递归填充字符串。它们似乎都填充了列表。提前致谢

标签: java android html parsing html-table


【解决方案1】:

解决方法如下。我将数据库输出到列表视图只是为了显示我拥有所有正确的数据。

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);




       }
}

【讨论】:

    【解决方案2】:

    使用 SAX 或其他一些 XML 解析器解析表数据可能会很幸运,然后从那里使用 SQLIteDatabaseHelper 类创建表并插入数据。如果您有更具体的问题,我会尝试给出更具体的答案:-)

    【讨论】:

    • 谢谢,抱歉这个问题有点松散。我现在已经解决了它并用我的解决方案进行了编辑。
    猜你喜欢
    • 2015-10-22
    • 2011-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多