2015-10-15 28 views
0

读取XML子项目,请在我的XML文件中的样子:在VB.NET

<?xml version="1.0" encoding="utf-8"?> 
<!--XML Database.--> 
<data> 
    <student> 
    <name>John E.</name> 
    <tests> 
     <test> 
     <lesson>Mathematics</lesson> 
     <grade>A</grade> 
     </test> 
     <test> 
     <lesson>Physics</lesson> 
     <grade>A+</grade> 
     </test> 
    </tests> 
    </student> 
    <!-- sidenote: jessica didn't attend the physics exam--> 
    <student> 
    <name>Jessica B</name> 
    <tests> 
     <test> 
     <lesson>Mathematics</lesson> 
     <grade>B</grade> 
     </test> 
    </tests> 
    </student> 
</data> 

我想显示每个学生有测试。我在我的应用程序(TextBox1)中有1个文本框,我想输入“John E.”或“杰西卡乙”。它会给我他们所做的测试。

已经添加了一个ListView和2个colums:lesson,grade。

我尝试了很多方法,但还没有找到一个工作。编写这样的XML结构非常简单,但无法完成阅读工作。感谢任何帮助。

请注意,该im目前正在使用此代码: http://forum.codecall.net/topic/69450-writing-and-reading-xml-files-vbnet-part-ii因此您可以基于此回答,它可以节省您的时间。

+1

显示您尝试阅读XML的代码。 – Tim

+1

我建议使用LINQ to XML - 这很容易,IMO。 – Tim

+0

我想运行For Each,使用特定名称的学生,并显示所有测试,您认为使用LINQ可能吗? – user3800799

回答

0

这是你需要的代码:两个按钮(一个用于“搜索”,另一个用于清晰的文本框和列表视图字段)以及一个文本框和一个列表视图。

Form Load其设置列表视图列:

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load 
     ListView1.Columns.Add("Lesson", 100, HorizontalAlignment.Left) 
     ListView1.Columns.Add("Grade", 150, HorizontalAlignment.Left) 
End Sub 

并为搜索按钮单击事件:

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 
     Dim isStudent As Boolean = False 
     Dim XmlDoc As XmlDocument = New XmlDocument() 
     Dim str(2) As String 
     Try 
      XmlDoc.Load("Put your XML file path here!") 
     Catch ex As Exception 
      MsgBox("XML Loading failled : " & vbCrLf & ex.Message & vbCrLf) 
     End Try 
     Dim element As XmlNodeList 
     Try 
      element = XmlDoc.DocumentElement.GetElementsByTagName("student") 
      For Each dataNode In element 
      //Go into data node 
       If dataNode.LocalName = "student" Then 
        For Each studentNode In dataNode.ChildNodes 
        //Loops the student childnodes 
         If studentNode.LocalName = "name" Then 
          If studentNode.InnerText.ToString.Trim.Equals(TextBox1.Text) Then 
           isStudent = True 
          Else 
           isStudent = False 
          End If 
         ElseIf studentNode.LocalName = "tests" And isStudent Then 
          For Each tests In studentNode.ChildNodes 
          //Loops tests childnodes... 
           If tests.LocalName = "test" Then 
            For Each test In tests.ChildNodes 
            //Loops test childnodes 
             If test.LocalName = "lesson" Then 
              str(0) = test.InnerText.ToString.Trim 
             ElseIf test.LocalName = "grade" Then 
              str(1) = test.InnerText.ToString.Trim 
             End If 
            Next 
            ListView1.Items.Add(New ListViewItem({str(0), str(1)})) 
           End If 
          Next 
         End If 
        Next 
       End If 
      Next 
     Catch ex As Exception 
      MsgBox("XML reading failed at element: " & vbCrLf & ex.Message & vbCrLf) 
     End Try 
End Sub 

清除按钮只是让你不断地寻找新的学生:

Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click 
    TextBox1.Text = "" 
    ListView1.Clear() 
    ListView1.Columns.Add("Lesson", 100, HorizontalAlignment.Left) 
    ListView1.Columns.Add("Grade", 150, HorizontalAlignment.Left) 
End Sub 

尝试研究代码并理解XML阅读作品。看起来很难,但这种方式总是相同的,它取决于你的XML结构:节点和子节点。但总是一样的!必须有一个最简单的方法来做到这一点,但这是编程的好习惯。