在 XML 数据文件中编写 LINQ 查询:VB.NET(VS2008)中的分步说明






3.91/5 (5投票s)
在 XML 文件上使用 VB.NET LINQ 查询。
引言
我需要创建一个 Web 项目的工作原型。我模拟了屏幕,在 XML 文件中创建了一些虚拟数据,并在屏幕上显示出来。现在,我想处理这些数据(查询 XML 文件并在其他屏幕上呈现)。我知道这可以通过 LINQ 来实现。我在网上搜索了一些代码片段。我能够找到一些帮助,但不得不花费大量时间。这促使我发布这个主题。希望它对一些初学者有所帮助。
使用代码
包含一个 Zip 文件,其中包含两个 ASP 页面和一个 XML 文件。随意使用它们。我不会在这里解释任何内容。相反,我将向您展示创建项目的逐步过程,您可以查看代码。
打开 VS 2008。通过选择 ASP.NET Web 网站模板创建一个新的 Web 项目。我将项目命名为“LinqDemo”。选择语言为“VisualBasic”和 .NET Framework 3.5。
删除default.aspx页面。添加一个新窗体Employee.aspx,并将其设置为起始页。修改Employee.aspx页面的代码,使其显示如下:
Employee.aspx:
将Employee.xml文件添加到项目中的App_Data文件夹。修改文件以显示如下数据:
修改Employee.aspx.vb文件以显示以下代码:
Partial Class Employee
Inherits System.Web.UI.Page
Protected Sub Page_Load(ByVal sender As Object, _
ByVal e As System.EventArgs) Handles Me.Load
If Not Page.IsPostBack Then
BindGrid()
End If
End Sub
Private Sub BindGrid()
Dim xmlDS As New XmlDataSource
xmlDS.DataFile = "~/App_Data/Employee.xml"
xmlDS.XPath = ".//Employee/ROW"
gvEmployee.DataSource = xmlDS
gvEmployee.DataBind()
End Sub
End Class
此时,您应该能够构建并运行项目。您应该能够看到一个页面,其中包含网格中的员工数据。
单击“详细信息”按钮时,我们希望在新页面上显示一些数据。我没有做任何令人难以置信的事情。我只是在新页面上的网格中显示相同的数据。
添加一个新页面,并将其命名为EmpDetails.aspx。修改页面,使其显示如下:
EmpDetails.aspx:
修改Employee.aspx.vb以显示如下:
Employee.aspx.vb:
Partial Class Employee
Inherits System.Web.UI.Page
Protected Sub Page_Load(ByVal sender As Object, _
ByVal e As System.EventArgs) Handles Me.Load
If Not Page.IsPostBack Then
BindGrid()
End If
End Sub
Private Sub BindGrid()
Dim xmlDS As New XmlDataSource
xmlDS.DataFile = "~/App_Data/Employee.xml"
xmlDS.XPath = ".//Employee/ROW"
gvEmployee.DataSource = xmlDS
gvEmployee.DataBind()
End Sub
Protected Sub gvEmployee_SelectedIndexChanged(ByVal sender As Object, _
ByVal e As System.EventArgs) Handles gvEmployee.SelectedIndexChanged
Session("EMPID") = gvEmployee.SelectedRow.Cells(0).Text
Response.Redirect("EmpDetails.aspx")
End Sub
End Class
修改EmpDetails.aspx.vb页面以显示如下:
EmpDetails.aspx.vb:
Partial Class EmpDetails
Inherits System.Web.UI.Page
Protected Sub Page_Load(ByVal sender As Object, _
ByVal e As System.EventArgs) Handles Me.Load
If Not Page.IsPostBack Then
BindData()
End If
End Sub
Private Sub BindData()
Dim pk As Integer
pk = CInt(Session("EMPID"))
Dim xmlDS = XElement.Load(Request.PhysicalApplicationPath & _
"/App_Data/Employee.xml")
Dim query = From row In xmlDS.Elements Where _
(CType(row.Attribute("empno"), Integer) = pk) Select row
For Each row As XElement In query
lblEmpNo.Text = row.Attribute("empno")
lblEmpName.Text = row.Attribute("ename")
lblJob.Text = row.Attribute("job")
lblHireDt.Text = row.Attribute("hiredate")
lblSal.Text = row.Attribute("sal")
lblDeptNo.Text = row.Attribute("deptno")
lblDeptName.Text = row.Attribute("dname")
lblLoc.Text = row.Attribute("loc")
Next
End Sub
Protected Sub btnBack_Click(ByVal sender As Object, _
ByVal e As System.EventArgs) Handles btnBack.Click
Response.Redirect("Employee.aspx")
End Sub
End Class
运行项目,您应该能够单击“详细信息”,这将显示 LINQ 返回的数据。
这是我发布的第一篇文章。评论对我的未来帖子会有所帮助。谢谢。