【问题标题】:How to read an XML File如何读取 XML 文件
【发布时间】:2013-04-10 18:14:36
【问题描述】:

我有一个 VB.net 程序。我正在尝试使用 XMLReader 读取 .xml 文件。我想将 XML 文件分解为不同的“部分”,在此示例中为 "FormTitle""ButtonTitle"。我想从FormTitle 中获取<Text> 数据并将其显示为"text" 表单并在"ButtonTitle" 中获取<Text> 并将其显示在按钮文本中。

这是我的 XML 文件:

<?xml version="1.0" encoding="utf-8"?>
<!--XML Database.-->
<FormTitle>
    <Text>Form Test</Text>
</FormTitle>
<ButtonTitle>
    <Text>Button Test</Text>
</ButtonTitle>

这是我当前的代码:

If (IO.File.Exists("C:\testing.xml")) Then

    Dim document As XmlReader = New XmlTextReader("C:\testing.xml")

    While (document.Read())

        Dim type = document.NodeType


        If (type = XmlNodeType.Element) Then

            '
            If (document.Name = "Text") Then
                Me.Text = document.ReadInnerXml.ToString()


            End If



        End If


    End While

Else

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

如何在下一节中引入(ButtonTitle)FormTitle 中的同名,即(Text)。我假设我需要在 if then 语句中引用 FormTitleButtonTitle

【问题讨论】:

  • 请注意,您的 XML 文件格式不正确。 XML 文件应该始终有一个根元素,而您的则有两个 - FormTitle 和 ButtonTitle。也许您应该将它们包装在父元素中,也许是 .

标签: xml vb.net xmlreader


【解决方案1】:

看看这个例子。 http://msdn.microsoft.com/en-us/library/dc0c9ekk.aspx?cs-save-lang=1&cs-lang=vb#code-snippet-2

你应该可以使用:

doc.GetElementsByTagName("FormTitle")

然后您可以遍历所有子节点。 http://msdn.microsoft.com/en-us/library/system.xml.xmlnode.childnodes.aspx

    Dim root As XmlNode = doc.GetElementsByTagName("FormTitle").Item(1)

    'Display the contents of the child nodes. 
    If root.HasChildNodes Then 
        Dim i As Integer 
        For i = 0 To root.ChildNodes.Count - 1
            Console.WriteLine(root.ChildNodes(i).InnerText)
        Next i
    End If 

【讨论】:

    【解决方案2】:

    使用 XDocument 读取 Xml 效率更高,并且由于语法更少,可读性也更高。

    您需要将根添加到您的 XML。我称它为根,但它可以是任何东西。它只是封装了你所有的 XML

    <?xml version="1.0" encoding="utf-8"?>
    <root>
    <FormTitle>
        <Text>Form Test</Text>
    </FormTitle>
    <ButtonTitle>
        <Text>Button Test</Text>
    </ButtonTitle>
    </root>
    

    这是从 FormTitle 中提取“表单测试”的示例

        Dim document As XDocument = XDocument.Load("c:\tmp\test.xml")
        Dim title = From t In document.Descendants("FormTitle") Select t.Value
    

    将文本分配给表单

    Form1.Text = title.First()
    

    【讨论】:

    • 我不确定我是否理解最后一部分。你的“昏暗的标题”你在这里做什么?获取 的值?如果是这样,您将如何将表单文本更改为该文本?我试过 'me.text = title.tostring' 但这不起作用。
    • 在解释的底部添加了额外的位。 'Dim title' 正在创建一个名为 title 的变量,它是一个 IEnumerable。调用 .First 获取可枚举中的第一个值。在这种情况下,无论如何只有 1 个。
    • 太好了,之后的每个值都会是“第二”“第三”等?
    • 如果有多个 元素,您将使用循环遍历它们。这是一个很好的链接,其中包含许多 vb.net 示例,可帮助您掌握基础知识:msdn.microsoft.com/en-gb/library/vstudio/bb763068.aspx
    猜你喜欢
    • 2020-02-10
    • 2023-02-05
    • 1970-01-01
    • 1970-01-01
    • 2011-08-06
    • 2010-11-20
    • 2011-01-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多