将HTML表解析为Xamarin可用数据格式

时间:2019-06-20 14:42:40

标签: c# xamarin sqlite-net

我正在编写一个Xamarin应用,该应用具有从HTML表中获取一些数据的功能。然后,我想以某种方式在我的应用程序中显示此数据;目前,我正在考虑使用ListView,但是我对其他选择持开放态度。

在我的网络抓取原型中,我只是使用HtmlAgility抓取了HTML表,然后遍历行并将其插入到DataTable中:

                foreach (HtmlNode row in table.SelectNodes("tr"))
                {
                    DataRow dr = dt.NewRow();
                    int counter = 1;

                    foreach (HtmlNode cell in row.SelectNodes("td"))
                    {
                        switch (counter)
                        {
                            case 1:
                                dr["Column1"] = cell.InnerText;
                                break;
                            case 2:
                                dr["Column2"] = cell.InnerText;
                                break;
                            case 3:
                                dr["Column3"] = cell.InnerText;
                                break;
                            case 4:
                                dr["Column4"] = cell.InnerText;
                                break;
                            case 5:
                                dr["Column5"] = cell.InnerText;
                                break;
                            case 6:
                                dr["Column6"] = cell.InnerText;
                                break;
                            case 7:
                                dr["Column7"] = cell.InnerText;
                                break;
                        }
                        counter++;
                    }
                    dt.Rows.Add(dr);
                }

我认为使用DataTable对于移动应用程序不是很明智(甚至可能吗?)。

目前,我正在考虑使用SQLite-Net创建本地数据库并将HTML表中的记录插入数据库表中。

这是一种明智的方法,我将如何使用SQLite做到这一点?

1 个答案:

答案 0 :(得分:0)

您的最佳选择将是。

首先,声明一个对象以表示Listview的每一行,

示例:

public class Element
{
    public string Element1 {get; set;}
    public string Element2 {get; set;}
}

在这里,您将拥有元素的每一行,并在列表视图的各列中显示不同的数据。

public class Element
{
    public string Element1 {get; set;}
    public string Element2 {get; set;}
}

然后,在ViewModel中,声明用于存储项目的列表。

public ObvervableCollection<Element> MyItems = new ObservableCollection();

此后,在您的Page.xaml中,声明一个列表视图,记下Header,以显示Table Headers,然后在视单元格中显示要显示的元素

<ListView x:Name=”MainListView” ItemsSource={Binding MyItems}>  
    <ListView.HeaderTemplate>  
        <DataTemplate>  
            <Grid>  
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="*"/>
                    <ColumnDefinition Width="*"/>
                </Grid.ColumnDefinitions>
                   <Label Text=”Column1" Grid.Column="0"/>

                   <Label Text=”Column2" Grid.Column="1"/>
           </Grid>
        </DataTemplate>  
    </ListView.HeaderTemplate>  
    <ListView.ItemTemplate>  
        <DataTemplate>  
            <ViewCell>  
               <Grid>  
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="*"/>
                    <ColumnDefinition Width="*"/>
                </Grid.ColumnDefinitions>
                <Label Text=”{Binding Element1}" Grid.Column="0"/>

                <Label Text=”{Binding Element2}" Grid.Column="1"/>
            </Grid>
            </ViewCell>  
        </DataTemplate>  
    </ListView.ItemTemplate>  
</ListView>