大概分为两种
一种是单数据存储,这类应用就是 保存配置之类的,所有节点元素 都是单一的,首先先看一个操作XML中的元素值的类
Public Class CSysXML
Dim mXmlDoc As New System.Xml.XmlDocument
Public XmlFile As String
Public Sub New(ByVal File As String)
MyClass.XmlFile = File
MyClass.mXmlDoc.Load(MyClass.XmlFile) '加载配置文件
End Sub
'功能:取得元素值
'参数:node--节点 element--元素名
'返回:元素值 字符型
' $--表示出错误
Public Function GetElement(ByVal node As String, ByVal element As String) As String
On Error GoTo Err
Dim mXmlNode As System.Xml.XmlNode = mXmlDoc.SelectSingleNode("//" + node)
'读数据
Dim xmlNode As System.Xml.XmlNode = mXmlNode.SelectSingleNode(element)
Return xmlNode.InnerText.ToString
Err:
Return "$"
End Function
'
'功能:保存元素值
'参数:node--节点名称 element--元素名 val--值
'返回:True--保存成功 False--保存失败
Public Function SaveElement(ByVal node As String, ByVal element As String, ByVal val As String) As Boolean
On Error GoTo err
Dim mXmlNode As System.Xml.XmlNode = mXmlDoc.SelectSingleNode("//" + node)
Dim xmlNodeNew As System.Xml.XmlNode
xmlNodeNew = mXmlNode.SelectSingleNode(element)
xmlNodeNew.InnerText = val
mXmlDoc.Save(MyClass.XmlFile)
Return True
err:
Return False
End Function
End Class
此类模块的功能是修改某个节点元素的值
我们保存下面代码为 shop.xml
<?xml version="1.0" encoding="gb2312"?>
<shop>
<goods>
<name>11111</name>
</goods>
</shop>
打开VB.NET 在窗体上画三个文本框以及一个按钮
实现操作XML的VB.NET,写入某节点的某元素的值的代码:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim xmlTest As New CSysXML(Application.StartupPath &amp; "\test.xml")
xmlTest.SaveElement(TextBox1.Text, TextBox2.Text, TextBox3.Text)
End Sub
TextBox1.Text 为节点的名称,写入 goods –商品
TextBox2.Text 为元素的名称,写入 name –商品名称
TextBox3.Text 为元素的值,任意写入一个值 –值
同理,读取xml文件也一样,用GetElement获取某节点元素的值.
下面重点说下 多条记录的情况下
<?xml version="1.0" encoding="gb2312"?>
<website>
<web name="搜狐">
<title>搜狐-中国最大的门户</title>
<url>http://www.sohu.com</url>
</web>
<web name="新浪">
<title>新浪-中国最好的门户</title>
<url>http://www.sina.com</url>
</web>
</website>
所需控件listbox1 列举所有name
textbox 三个分别为 textbox4/textbox5/textbox6 ,分别用来保存/修改 name属性 title和url的值
按钮 四个分别用来增加/删除/修改/刷新
下面为全部代码
'add
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
Dim xmlDoc As New XmlDataDocument
xmlDoc.Load("111.xml")
Dim root As XmlNode = xmlDoc.SelectSingleNode("collect") 'find collect
Dim xe1 As XmlElement = xmlDoc.CreateElement("rule") 'create
xe1.SetAttribute("name", TextBox6.Text) '设置该节点name属性
Dim xe1Title As XmlElement = xmlDoc.CreateElement("title") 'create title
xe1Title.InnerText = TextBox4.Text
xe1.AppendChild(xe1Title)
Dim xe1Url As XmlElement = xmlDoc.CreateElement("url") 'create url
xe1Url.InnerText = TextBox5.Text
xe1.AppendChild(xe1Url)
root.AppendChild(xe1) 'add to <collect>
xmlDoc.Save("111.xml")
Button3_Click(Nothing, Nothing) 'refrest
End Sub
'read
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
ListBox1.Items.Clear()
Dim xmlDoc As New XmlDataDocument
xmlDoc.Load("111.xml")
Dim xn As XmlNode = xmlDoc.SelectSingleNode("collect")
Dim xnl As XmlNodeList = xn.ChildNodes
Dim xnf As XmlNode
For Each xnf In xnl
Dim xe As XmlElement = CType(xnf, XmlElement)
If xe.GetAttribute("name") <> "" Then
ListBox1.Items.Add(xe.GetAttribute("name")) '& vbCrLf '显示属性值
End If
Next xnf
End Sub
'delete
Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
If ListBox1.SelectedItems.Count = 0 Then Exit Sub
Dim xmlDoc As New XmlDataDocument
xmlDoc.Load("111.xml")
Dim xnl As XmlNodeList = xmlDoc.SelectSingleNode("collect").ChildNodes
Dim xn As XmlNode
For Each xn In xnl
Dim xe As XmlElement = CType(xn, XmlElement)
If xe.GetAttribute("name") = ListBox1.SelectedItem.ToString Then
xe.RemoveAttribute("name") '删除genre属性
xe.RemoveAll() '删除该节点的全部内容
End If
Next xn
xmlDoc.Save("111.xml")
ListBox1.Items.Clear()
Button3_Click(Nothing, Nothing) 'refrest
End Sub
'edit
Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button5.Click
If ListBox1.SelectedItems.Count = 0 Then Exit Sub
Dim xmlDoc As New XmlDataDocument
xmlDoc.Load("111.xml")
Dim nodeList As XmlNodeList = xmlDoc.SelectSingleNode("collect").ChildNodes '获取bookstore节点的所有子节点
Dim xn As XmlNode
For Each xn In nodeList '遍历所有子节点
Dim xe As XmlElement = CType(xn, XmlElement) '将子节点类型转换为XmlElement类型
If xe.GetAttribute("name") = ListBox1.SelectedItem.ToString Then '如果genre属性值为“李赞红”
xe.SetAttribute("name", TextBox6.Text) '则修改该属性为“update李赞红”
Dim nls As XmlNodeList = xe.ChildNodes '继续获取xe子节点的所有子节点
Dim xn1 As XmlNode
For Each xn1 In nls '遍历
Dim xe2 As XmlElement = CType(xn1, XmlElement) '转换类型
If xe2.Name = "title" Then '如果找到
xe2.InnerText = TextBox4.Text '则修改
ElseIf xe2.Name = "url" Then
xe2.InnerText = TextBox5.Text
End If
'Exit For '找到退出来就可以了
Next xn1
Exit For
End If
Next xn
xmlDoc.Save("111.xml") '保存。
Button3_Click(Nothing, Nothing) 'refrest
End Sub
本文代码均为实现代码,使用时可以根据实际需求进行优化..
版权所有,转载时必须以链接形式注明作者和原始出处及本声明:KingLife@无忧岛
本文链接: http://www.islandcn.com/post/746.html
近期评论