我从一个自我教学的练习开始,现在我很沮丧。如果有人可以帮助我学习,我将不胜感激,方法是引导我完成我将要解释的练习和必要的内容。
我编写了一个非常基本的可视化基本应用程序,其功能如下:
以图形方式显示,我的表单有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>
在此先感谢您的帮助,我期待着学习!
首先要学习的是保持代码干燥,即-不要重复自己。如果您发现您的代码变得无聊,并且几乎无法分辨每个块在做什么,因为它与上一个非常相似-就是这样。停止并重构。如果您愿意花时间在代码上,总有一种方法可以使代码更好。
您可以使用较少的代码行(LINQ-to-XML)完成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作为作业。试一下,从上面给出的示例中应该很容易。让我知道您是否需要帮助。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句