你如何通过VB2010读取xml的多个条目

时间:2013-10-24 15:22:07

标签: xml vb.net

好的,这是我完全搞砸的问题。我需要阅读几行xml条目以找到我需要的东西。 “举个例子” -

    <?xml version="1.0" encoding="utf-8"?>
    <!--XML Database.-->
    <Data>
      <Person>
        <Name>hayyo</Name>
        <Email>222@yolo.com</Email>
        <Tel>345</Tel>
      </Person>
      <Person>
        <Name>hihi</Name>
        <Email>666@yolo.com</Email>
        <Tel>665</Tel>
      </Person>
    </Data>

j * 我现在知道如何做几行xml条目。 (对我而言) *

    Imports System.Xml

Public Class Form1

    Dim XmlOut As XmlWriter
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click


        With XmlOut



            ' Start our first person.
            .WriteStartElement("Person")

            ' The person nodes.
            .WriteStartElement("Name")
            .WriteString(fullName.Text.ToString())
            .WriteEndElement()

            .WriteStartElement("Email")
            .WriteString(address.Text.ToString())
            .WriteEndElement()

            .WriteStartElement("Tel")
            .WriteString(phoneNum.Text.ToString())
            .WriteEndElement()


            ' The end of this person.
            .WriteEndElement()



        End With

        MessageBox.Show("XML file saved.")
    End Sub

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click

        Form2.Show()

    End Sub

    Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click

        ' Close the XmlTextWriter.
        XmlOut.WriteEndDocument()
        XmlOut.Close()

        MessageBox.Show("XML file ended.")
    End Sub

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        Dim settings As New XmlWriterSettings()
        settings.Indent = True

        ' Initialize the XmlWriter.
        XmlOut = XmlWriter.Create("MyName.xml", settings)

        ' Write the Xml declaration.
        XmlOut.WriteStartDocument()

        ' Write a comment.
        XmlOut.WriteComment("XML Database.")

        ' Write the root element.
        XmlOut.WriteStartElement("Data")

    End Sub

但是我不知道如何显示条目。 我只想要显示名称。它现在只显示最后一个条目。

Imports System.Xml
Imports System.IO

Public Class Form2

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As 
    System.EventArgs) Handles Button1.Click
        If (Search.Text = "") Then

            MessageBox.Show("No file name entered")

        Else

            If (System.IO.File.Exists(Search.Text.ToString())) Then

                Dim document As XmlReader = New XmlTextReader(Search.Text.ToString())

                While (document.Read())

                    Dim type = document.NodeType

                    If (type = XmlNodeType.Element) Then

                        If (document.Name = "Name") Then

                            XmlName.Visible = True
                            XmlName.Text = document.ReadInnerXml.ToString()

                        End If

                        If (document.Name = "Email") Then

                            XmlAddress.Visible = True
                            XmlAddress.Text = document.ReadInnerXml.ToString()

                        End If

                        If (document.Name = "Tel") Then

                            XmlPhone.Visible = True
                            XmlPhone.Text = document.ReadInnerXml.ToString()

                        End If

                    End If

                End While

            Else

                MessageBox.Show("The filename you selected was not found.")

            End If

        End If
    End Sub
End Class

另外,我将如何搜索xml文件以查找hihi然后将其电话号码拉入文件并显示。

我知道这不是很多,但我试图找出如何小规模搜索,所以我可以稍后在一个大文件的项目中工作。

我刚刚想出了我将来的作业所需要的内容,所以在构建作业之前,我正在尝试编辑一个旧文件。

正确方向的一点是很酷的。

任何帮助都是好的,甚至是非常先进的东西。这样我就可以把老师的混乱弄糊涂了。 lol * *

我仍在努力,所以我可能会再次更新。我只有6个代表,所以我还不能回答我自己的问题。

2 个答案:

答案 0 :(得分:0)

  

正确方向的一点是很酷的。

您可以将xml文件用作数据源,并使用LINQ从中提取记录。甚至还有一个为xml设计的LINQ版本。

或者,即使您说文件很大,也可以使用数据表中的方法将xml文件直接加载到数据表中,这样可以加快搜索速度。

答案 1 :(得分:0)

首先创建一个空的控制台应用程序,将此代码放入其中:

Module Module1
  Sub Main()
    Dim xml = <?xml version="1.0" encoding="utf-8"?>
              <!--XML Database.-->
              <Data>
                <Person>
                  <Name>hayyo</Name>
                  <Email>222@yolo.com</Email>
                  <Tel>345</Tel>
                </Person>
                <Person>
                  <Name>hihi</Name>
                  <Email>666@yolo.com</Email>
                  <Tel>665</Tel>
                </Person>
              </Data>

    Dim p = xml.Root.Descendants("Name") '<----
  End Sub
End Module

此时p将包含Name of Name节点(XElement)。使用LINQ或循环迭代并根据需要显示。

enter image description here

在您的情况下,您可能正在从文件加载XML,因此请使用XDocument.Load