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>
我有几个问题:
XML 文件中 "root node" 的用途是什么?我在这
创建了一个节点 "config" 以使我的代码正常工作,但我没有
真正理解为什么是必要的。
是否需要WriteStartDocument/WriteEndDocument?
我如何编写一个子程序来将该文件读回到我的应用程序中?我特别难以获得 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
我决定使用 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>
我有几个问题:
XML 文件中 "root node" 的用途是什么?我在这 创建了一个节点 "config" 以使我的代码正常工作,但我没有 真正理解为什么是必要的。
是否需要WriteStartDocument/WriteEndDocument?
我如何编写一个子程序来将该文件读回到我的应用程序中?我特别难以获得 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