VB.NET:从 XML 文件中读取多个属性和表

VB.NET: Read Multiple Properties and Tables from XML File

我决定使用 XML 文件保存一些应用程序数据。我对 XML 文件很陌生,所以请多多包涵。

我有一个像这样的class):

Public Class config
    Public Property name As String
    Public Property type As String

    Public Property inputsTable As DataTable
    Public Property outputsTable As DataTable

    Public Sub WriteXML(filePath As String)
        Using writer As XmlWriter = XmlWriter.Create(filePath)
            writer.WriteStartDocument()
            writer.WriteStartElement("config")

            writer.WriteElementString("name", Me.name)
            writer.WriteElementString("type", Me.type)

            Me.inputsTable.WriteXml(writer)
            Me.outputstable.WriteXml(writer)

            writer.WriteEndElement()
            writer.WriteEndDocument()
        End Using
    End Sub
End Class

WriteXML 子结果生成如下文件:

<?xml version="1.0" encoding="utf-8"?>
<config>
    <name>testConfigName</name>
    <type>testConfigType</type>
    <DocumentElement>
        <inputs>
            <inputName>testInputName1</inputName>
            <inputValue>testInputValue1</inputValue>
        </inputs>
        <inputs>
            <inputName>testInputName2</inputName>
            <inputValue>testInputValue2</inputValue>
        </inputs>
    </DocumentElement>
    <DocumentElement>
        <outputs>
            <outputName>testOutputName1</outputName>
            <outputValue>testOutputValue1</outputValue>
        </outputs>
    </DocumentElement>
</config>

我有几个问题:

  1. XML 文件中 "root node" 的用途是什么?我在这 创建了一个节点 "config" 以使我的代码正常工作,但我没有 真正理解为什么是必要的。

  2. 是否需要WriteStartDocument/WriteEndDocument?

  3. 我如何编写一个子程序来将该文件读回到我的应用程序中?我特别难以获得 tables。我能够使用以下方法获取单个元素:

    Using reader As XmlReader = XmlReader.Create(filePath)
        While reader.Read()
            Select Case reader.NodeType
                Case XmlNodeType.Element
                    Select Case reader.Name
                        Case "name"
                            name = reader.ReadElementContentAsString()
                        Case "type"
                            type = reader.ReadElementContentAsString()
                    End Select    
            End Select
        End While
    End Using
    

    但我不知道如何(或者如果可能的话)将它与:

    inputsTable.ReadXml(reader)
    outputsTable.ReadXml(reader)
    

    似乎 ReadXml 可能实际上不适用于我正在尝试做的事情(阅读特定的 tables)并且适用于更简单的单-table XML 结构,但我无法明确确认。

任何帮助将不胜感激!

试试这个代码,.Net 序列化器为你做了很多工作。

Public Class config
    Public Property name As String
    Public Property type As String

    Public Property inputsTable As DataTable
    Public Property outputsTable As DataTable

    Public Sub WriteXML(filePath As String)

        Dim writer As New XmlSerializer(GetType(config))
        Dim file As New StreamWriter(filePath)
        writer.Serialize(file, Me)
        file.Close()
    End Sub

    Public Shared Function ReadXML(filePath As String) As config

        Dim reader = New XmlSerializer(GetType(config))
        Dim file = New StreamReader(filePath)
        Dim fileData = CType(reader.Deserialize(file), config)

        Return fileData

    End Function

End Class

顺便说一句,这些代码模式是您可以通过右键单击轻松访问的片段,并且: 单击插入代码段 -> 数据 - LINQ -XML 等... -> XML -> XML 读取/XML 写入 -> 从/到 class .

如何忽略 属性

<XmlIgnore>
Public Property inputsTable As DataTable