通过DataSet从文件中读取Xml文档

来源:互联网 发布:foxtable 连接数据库 编辑:程序博客网 时间:2024/06/11 14:46

1,通过DataSet从文件中读取Xml文档 
DataSet是ADO.net结构的主要组件,用以表示内存中的数据库。DataSet对象由DataTable对象的集合组成,因此可以使用 DataRelation对象将这些对象互相关联。每一个DataTable对象可以视为一个表,可以拥有多个DataRowCollection对象和DataColumnCollection对象。无论是DataRowCollection对象或DataColumnCollection对象,都可以拥有多个DataRow对象或DataColumn对象,每一个DataRow对象代表一个数据列(可用一条记录来表示),每一个DataColumn对象代表一个数据列(可用一个字段来表示)。可以看出,DataSet中数据的存放形式是直观的表格形式。
DataSet的功能是十分强大的,在Asp.net中主要用来存储数据库的查询结果;但是也能很方便的操纵xml文档 
DataSet读写xml文档的示例如下:

Dim dataset As DataSet = New DataSet() 
Dim fs As FileStream 
fs = New FileStream(Server.MapPath("sample.xml"), FileMode.Open, FileAccess.Read) 
dataset.ReadXml(fs) 
fs.Close() 
2,DataGrid与DataSet中表的数据绑定 

用DataSet读取数据后,可以用DataGrid与之绑定显示。对于xml来说,如果xml中存在层次关系,则 DataSet根据层次的缩进程度将同一层的结点放在同一个表中。同时将不同层次结点之间的隶属关系 存放在relation域中。对于如下一个xml文档

<?xml version="1.0" encoding="utf-8" ?> 
<Features> 
<Feature fno="1"> 
<Atrribute ano="1">Address </attribute> 
<Atrribute ano="2">Cost </attribute>; 
</Feature> 
<Feature fno="2"> 
<Atrribute ano="1">Address </attribute> 
</Feature> 
</Features> 

DataSet是这样存储的:Table(0)中存放Feature层的信息,包括fno等属性,只有一行;
Table(1)中包括Attribute的信息包括ano等属性,有两行。如果Attribute下还有其他子层,就依次放在 Table(2)..中。 DataSet读取数据之后,可以与DataGrid绑定进行显示,绑定时可以针对DataSet中的单个表,也可以一次绑定所有表。绑定的示例如下: 

Dim datagrid As DataGrid = New DataGrid() 
datagrid.DataSource = dataset.Table(0).DefaultView '绑定单个表 
datagrid.DataSource = dataset '绑定全部表,默认显示只有最先一张表 
datagrid.DataBind() 

这样dataset中的内容就可以在DataGrid中显示了,如果发现绑定无错而没有显示,可以检查一下是否给datagrid分配了内存,New多New少都不行。 
3,DataSet中层次关系的实现

DataSet在读取数据的同时,还根据xml文档中的层次关系对生成的表进行了关联。 
在上例中,Feature与Attribute的对象之间的父/子关系存放在DataSet.Relations中,关系名为“Feature-Attribute”(自动生成) 该关系的parentTable指向Table(0),而childTable指向Table(1),这样就可以很方便的根据关系打印父子表格。 
点击这里查看Msdn上的根据Relations读取子表的例子 
然而这样的读取是整个表的读取,对于上例的xml格式,子表则将三个attribute都显示出来了。如果我们只想查询父表中某一行的子属性(如只查询fno为1的Feature的子属性),可以通过如下方法: 
先从父表中获取该行对象,然后根据Relation中的关系查询行对象的所有子行。 
获取父子表关系: 
Dim relation As DataRelation 
For Each relation In data.Relations 
If relation.ParentTable.TableName = "Feature" Then 
'得到该relation 
End If 
Next 

然后获得子行: 
Dim childrows() As DataRow 
childrows = data.Tables(0).Rows(1).GetChildRows(relation) 

原创粉丝点击