无忧岛

06 五, 2010

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

Posted by: kinglife In: Software

大概分为两种
一种是单数据存储,这类应用就是 保存配置之类的,所有节点元素 都是单一的,首先先看一个操作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;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")) '&amp; 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


Tags: , ,

2 Responses to "VB.NET完美操作XML实例,操作XML类"

1 | 视频聊天

五月 8th, 2010 at 13:26

Avatar

完美操作XML实例

2 | 网赚资源

六月 5th, 2010 at 17:28

Avatar

博客不错
围观一下

Comment Form

Categories

Flickr PhotoStream

    flickrRSS probably needs to be setup

About

Name:KingLife
Email:lifewz#163.com