VB.NET完美操作XML实例,操作XML类

鉴客 发布于 2010/05/19 14:39
阅读 3K+
收藏 3

大概分为两种
一种是单数据存储,这类应用就是 保存配置之类的,所有节点元素 都是单一的,首先先看一个操作XML中的元素值的类

  1. Public Class CSysXML  
  2.     Dim mXmlDoc As New System.Xml.XmlDocument  
  3.     Public XmlFile As String  
  4.   
  5.     Public Sub New(ByVal File As String)  
  6.         MyClass.XmlFile = File  
  7.         MyClass.mXmlDoc.Load(MyClass.XmlFile)       '加载配置文件  
  8.     End Sub  
  9.   
  10.     '功能:取得元素值  
  11.     '参数:node--节点       element-- 元素名  
  12.     '返回:元素值   字符型  
  13.     '             $--表示出错误  
  14.     Public Function GetElement(ByVal node As StringByVal element As StringAs String  
  15.         On Error GoTo Err  
  16.         Dim mXmlNode As System.Xml.XmlNode = mXmlDoc.SelectSingleNode("//" + node)  
  17.   
  18.         '读数据  
  19.         Dim xmlNode As System.Xml.XmlNode = mXmlNode.SelectSingleNode(element)  
  20.         Return xmlNode.InnerText.ToString  
  21. Err:  
  22.         Return "$"  
  23.     End Function  
  24.     '  
  25.     '功能:保存元素值  
  26.     '参数:node--节点名称     element--元素名       val--值  
  27.     '返回:True--保存成功     False--保 存失败  
  28.     Public Function SaveElement(ByVal node As StringByVal element As StringByVal val As StringAs Boolean  
  29.         On Error GoTo err  
  30.         Dim mXmlNode As System.Xml.XmlNode = mXmlDoc.SelectSingleNode("//" + node)  
  31.         Dim xmlNodeNew As System.Xml.XmlNode  
  32.   
  33.         xmlNodeNew = mXmlNode.SelectSingleNode(element)  
  34.         xmlNodeNew.InnerText = val  
  35.         mXmlDoc.Save(MyClass.XmlFile)  
  36.         Return True  
  37. err:  
  38.         Return False  
  39.     End Function  
  40.   
  41. End Class  

此类模块的功能是修改某个节点元素的值
我们保存下面代码为 shop.xml

  1. <?xml version="1.0" encoding="gb2312"?>  
  2. <shop>  
  3.   <goods>  
  4.     <name>11111</name>  
  5.   </goods>  
  6. </shop>  

打开VB.NET 在窗体上画三个文本框以及一个按钮
实现操作XML的VB.NET,写入某节点的某元素的值的代码:

  1. Private Sub Button1_Click(ByVal sender As System.ObjectByVal e As System.EventArgs) Handles Button1.Click  
  2.     Dim xmlTest As New CSysXML(Application.StartupPath &amp;amp; "\test.xml")  
  3.     xmlTest.SaveElement(TextBox1.Text, TextBox2.Text, TextBox3.Text)  
  4. End Sub  

TextBox1.Text 为节点的名称,写入 goods –商品
TextBox2.Text 为元素的名称,写入 name –商品名称
TextBox3.Text 为元素的值,任意写入一个值 –值

同理,读取xml文件也一样,用GetElement获取某节点元素的值.
下面重点说下 多条记录的情况下

  1. <?xml version="1.0" encoding="gb2312"?>  
  2. <website>  
  3.   <web name="搜狐">  
  4.     <title>搜狐-中国最大的门户</title>  
  5.     <url>http://www.sohu.com</url>  
  6.   </web>  
  7.   <web name="新浪">  
  8.     <title>新浪-中国最好的门户</title>  
  9.     <url>http://www.sina.com</url>  
  10.   </web>  
  11. </website>  

所需控件listbox1 列举所有name
textbox 三个分别为 textbox4/textbox5/textbox6 ,分别用来保存/修改 name属性 title和url的值

按钮 四个分别用来增加/删除/修改/刷新

下面为全部代码

  1. 'add  
  2. Private Sub Button2_Click(ByVal sender As System.ObjectByVal e As System.EventArgs) Handles Button2.Click  
  3.     Dim xmlDoc As New XmlDataDocument  
  4.     xmlDoc.Load("111.xml")  
  5.     Dim root As XmlNode = xmlDoc.SelectSingleNode("collect")   'find collect  
  6.     Dim xe1 As XmlElement = xmlDoc.CreateElement("rule")  'create  
  7.   
  8.     xe1.SetAttribute("name", TextBox6.Text) '设置该节点name属性   
  9.   
  10.     Dim xe1Title As XmlElement = xmlDoc.CreateElement("title")   'create title  
  11.     xe1Title.InnerText = TextBox4.Text  
  12.     xe1.AppendChild(xe1Title)  
  13.   
  14.     Dim xe1Url As XmlElement = xmlDoc.CreateElement("url")    'create url  
  15.     xe1Url.InnerText = TextBox5.Text  
  16.     xe1.AppendChild(xe1Url)  
  17.   
  18.     root.AppendChild(xe1)   'add to <collect>  
  19.     xmlDoc.Save("111.xml")  
  20.   
  21.     Button3_Click(NothingNothing)     'refrest  
  22. End Sub  
  23.   
  24. 'read  
  25. Private Sub Button3_Click(ByVal sender As System.ObjectByVal e As System.EventArgs) Handles Button3.Click  
  26.     ListBox1.Items.Clear()  
  27.     Dim xmlDoc As New XmlDataDocument  
  28.     xmlDoc.Load("111.xml")  
  29.     Dim xn As XmlNode = xmlDoc.SelectSingleNode("collect")  
  30.     Dim xnl As XmlNodeList = xn.ChildNodes  
  31.     Dim xnf As XmlNode  
  32.     For Each xnf In xnl  
  33.         Dim xe As XmlElement = CType(xnf, XmlElement)  
  34.         If xe.GetAttribute("name") <> "" Then  
  35.             ListBox1.Items.Add(xe.GetAttribute("name")) '&amp; vbCrLf  ' 显示属性值  
  36.         End If  
  37.     Next xnf  
  38. End Sub  
  39.   
  40. 'delete  
  41. Private Sub Button4_Click(ByVal sender As System.ObjectByVal e As System.EventArgs) Handles Button4.Click  
  42.     If ListBox1.SelectedItems.Count = 0 Then Exit Sub  
  43.     Dim xmlDoc As New XmlDataDocument  
  44.     xmlDoc.Load("111.xml")  
  45.     Dim xnl As XmlNodeList = xmlDoc.SelectSingleNode("collect").ChildNodes  
  46.     Dim xn As XmlNode  
  47.     For Each xn In xnl  
  48.         Dim xe As XmlElement = CType(xn, XmlElement)  
  49.         If xe.GetAttribute("name") = ListBox1.SelectedItem.ToString Then  
  50.             xe.RemoveAttribute("name"'删除 genre属性  
  51.             xe.RemoveAll() '删除该节点的全部内容  
  52.         End If  
  53.     Next xn  
  54.     xmlDoc.Save("111.xml")  
  55.     ListBox1.Items.Clear()  
  56.     Button3_Click(NothingNothing)     'refrest  
  57. End Sub  
  58.   
  59. 'edit  
  60. Private Sub Button5_Click(ByVal sender As System.ObjectByVal e As System.EventArgs) Handles Button5.Click  
  61.     If ListBox1.SelectedItems.Count = 0 Then Exit Sub  
  62.     Dim xmlDoc As New XmlDataDocument  
  63.     xmlDoc.Load("111.xml")  
  64.     Dim nodeList As XmlNodeList = xmlDoc.SelectSingleNode("collect").ChildNodes '获取bookstore节点的所有子节点  
  65.     Dim xn As XmlNode  
  66.     For Each xn In nodeList '遍历所有子节点  
  67.         Dim xe As XmlElement = CType(xn, XmlElement) '将子节点类型转换为XmlElement类型  
  68.         If xe.GetAttribute("name") = ListBox1.SelectedItem.ToString Then '如果genre 属性值为“李赞红”  
  69.             xe.SetAttribute("name", TextBox6.Text) '则修改该属性为“update李赞红”  
  70.             Dim nls As XmlNodeList = xe.ChildNodes '继续获取xe子节点的所有子节点  
  71.             Dim xn1 As XmlNode  
  72.             For Each xn1 In nls '遍历  
  73.                 Dim xe2 As XmlElement = CType(xn1, XmlElement) '转换类型  
  74.                 If xe2.Name = "title" Then '如果找到  
  75.                     xe2.InnerText = TextBox4.Text  '则修改  
  76.                 ElseIf xe2.Name = "url" Then  
  77.                     xe2.InnerText = TextBox5.Text  
  78.                 End If  
  79.                 'Exit For '找到退出来就可以了  
  80.             Next xn1  
  81.             Exit For  
  82.         End If  
  83.     Next xn  
  84.     xmlDoc.Save("111.xml"'保存。  
  85.     Button3_Click(NothingNothing)     'refrest  
  86. End Sub  

本文代码均为实现代码,使用时可以根据实际需求进行优化..

<– 转载声明开始 –>

本文链接: http://www.islandcn.com/post/746.html

加载中
0
老萝卜
老萝卜

这个收藏了....

返回顶部
顶部