我开始这是一个自学教练,现在我很难过。如果有人能帮助我学习,我会非常感激,通过我的解释练习和必要的内容。
我编写了一个非常基本的基本应用程序,其功能如下:
图形上我的表格有4个文本框,与4个标签配对,标记如下:
它有3个按钮,一个用于保存数据,一个用于清除数据(从表单而非xml文件),另一个用于检索数据(在文本框中重新显示)。
到目前为止,这是我的代码:
Imports System.Xml
Public Class Form1
Private Sub Save_Data(Optional ByVal name As String = "", Optional ByVal color As String = "", Optional ByVal number As String = "", Optional ByVal zipcode As String = "")
Dim writer As New XmlTextWriter("saved_data.xml", System.Text.Encoding.UTF8)
Try
writer.WriteStartDocument(True)
writer.Formatting = Formatting.Indented
writer.Indentation = 2
writer.WriteStartElement("Saved_Data")
If Not txtName.Text = "" Then
writer.WriteStartElement("name")
writer.WriteString(name)
writer.WriteEndElement()
End If
If Not txtColor.Text = "" Then
writer.WriteStartElement("color")
writer.WriteString(color)
writer.WriteEndElement()
End If
If Not txtNumber.Text = "" Then
writer.WriteStartElement("number")
writer.WriteString(number)
writer.WriteEndElement()
End If
If Not txtZipCode.Text = "" Then
writer.WriteStartElement("zipcode")
writer.WriteString(zipcode)
writer.WriteEndElement()
End If
writer.WriteEndElement()
Catch ex As Exception
MessageBox.Show("There was an error storing the data!" + vbCrLf + vbCrLf + "Error: " + ex.Message)
Finally
writer.Close()
End Try
End Sub
Private Sub Retrieve_Data()
Dim reader As New XmlTextReader("saved_data.xml")
Try
While reader.Read()
reader.ReadStartElement("Saved_Data")
If Not reader.IsEmptyElement Then
reader.ReadStartElement("name")
txtName.Text = reader.ReadString()
reader.ReadEndElement()
End If
If Not reader.IsEmptyElement Then
reader.ReadStartElement("color")
txtColor.Text = reader.ReadString()
reader.ReadEndElement()
End If
If Not reader.IsEmptyElement Then
reader.ReadStartElement("number")
txtNumber.Text = reader.ReadString()
reader.ReadEndElement()
End If
If Not reader.IsEmptyElement Then
reader.ReadStartElement("zipcode")
txtZipCode.Text = reader.ReadString()
reader.ReadEndElement()
End If
reader.ReadEndElement()
End While
Catch ex As Exception
MessageBox.Show("There was an error retrieving the data!" + vbCrLf + vbCrLf + "Error: " + ex.Message)
Finally
reader.Close()
End Try
End Sub
Private Sub btnSave_Click(sender As System.Object, e As System.EventArgs) Handles btnSave.Click
Dim strName As String = txtName.Text
Dim strColor As String = txtColor.Text
Dim strNumber As String = txtNumber.Text
Dim strZipCode As String = txtZipCode.Text
Save_Data(strName, strColor, strNumber, strZipCode)
End Sub
Private Sub btnClear_Click(sender As System.Object, e As System.EventArgs) Handles btnClear.Click
txtName.Text = ""
txtColor.Text = ""
txtNumber.Text = ""
txtZipCode.Text = ""
End Sub
Private Sub btnRetrieve_Click(sender As System.Object, e As System.EventArgs) Handles btnRetrieve.Click
Retrieve_Data()
End Sub
End Class
请记住,我之前从未使用过xml,因此我可能也不了解它的vb.net方面。
这个项目的最终目标是创建一个"自动保存"在较大的项目上使用的结构。它在计时器上保存的位置,或在文本框中键入的AS。这样你就可以点击"清除"按钮随时,然后单击"检索"按钮从上次保存的数据中恢复。
我目前的问题是:"错误:' EndElement'是无效的XmlNodeType。第6行,第3位。" 检索数据时发生此错误。当我为错误添加快速监视时,它指向处理数据的任何块,从保存数据时保留空白的文本框输入。
以下是出现上述错误后生成的xml结果。我已离开"邮政编码"文本框空白。
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<Saved_Data>
<name>Tony</name>
<color>purple</color>
<number>20</number>
<zipcode />
</Saved_Data>
在此先感谢您的帮助,我期待着学习这一点!
答案 0 :(得分:0)
将Retrieve_Data方法替换为:
Private Sub Retrieve_Data()
Dim reader As New XmlTextReader("c:\\d.xml")
Try
While reader.Read()
reader.ReadStartElement("Saved_Data")
reader.ReadStartElement("name")
If Not reader.IsEmptyElement Then
txtName.Text = reader.ReadString()
End If
reader.ReadEndElement()
reader.ReadStartElement("color")
If Not reader.IsEmptyElement Then
txtColor.Text = reader.ReadString()
End If
reader.ReadEndElement()
reader.ReadStartElement("number")
If Not reader.IsEmptyElement Then
txtNumber.Text = reader.ReadString()
End If
reader.ReadEndElement()
reader.ReadStartElement("zipcode")
If Not reader.IsEmptyElement Then
txtZipCode.Text = reader.ReadString()
End If
reader.ReadEndElement()
If Not reader.ReadState = ReadState.EndOfFile Then
reader.ReadEndElement()
End If
End While
Catch ex As Exception
MessageBox.Show("There was an error retrieving the data!" + vbCrLf + vbCrLf + "Error: " + ex.Message)
Finally
reader.Close()
End Try
End Sub
注意每个块都已更改的事实,以及最终读取周围的额外代码...
答案 1 :(得分:0)
首先要学习的是保留代码DRY, that is - don't repeat yourself。如果你注意到你的代码变得枯燥无味,你几乎无法分辨出每个块正在做什么,因为它与之前的代码非常相似 - 就是这样。停止并重构。如果你愿意投入时间,总有办法让代码变得更好。
在您的案例中阅读XML可以使用更少的代码行(LINQ-to-XML)来完成:
Dim xDoc As XDocument = XDocument.Load("saved_data.xml")
With xDoc.Root
txtName.Text = .Element("name").Value
txtColor.Text = .Element("color").Value
txtNumber.Text = .Element("number").Value
txtZipCode.Text = .Element("zipcode").Value
End With
随着您的XML结构变得越来越复杂,您采取的方法将成为维护的噩梦。 XDocument但是非常灵活,专门用于处理复杂的案例。使用LINQ-to-XML方法,即使XML层次结构扩展为多个深度嵌套的节点,也可以使读取过程非常简单。
我将写作XML作为你的作业。试一试,从我上面给出的例子中可以很容易。如果您需要帮助,请告诉我。