记录一下开发过程中进行的一次XML操作实例,实现如下效果:

  1. 把winform中的一个DataGridView控件绑定的dataset对象转换成xml格式的字符串
  2. 该winform中还包含了多个textbox以及picturebox控件,相应的数据和上面的dataset数据一并封装到一个xml文件里
具体涉及到的技术都在源代码中注释:

    ''' <summary>
    ''' 导出当前票据数据为xml格式
    ''' </summary>
    ''' <param name="sender"></param>
    ''' <param name="e"></param>
    ''' <remarks></remarks>
    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        Dim strXML As String
        strXML = Me.PiaojuDataSet2.GetXml() '将dataset对象转换成string类型XML格式,等待合并到最终的XML文件中

        Dim writer As New Xml.XmlTextWriter("d:\test2.xml", System.Text.Encoding.GetEncoding("utf-8"))  '定义要输出的xml文件编码及保存路径
        writer.Formatting = Xml.Formatting.Indented '设置XML使用自动缩进便于阅读
        writer.WriteRaw("<?xml version=""1.0"" encoding=""utf-8"" ?>")  '书写根标签()
        writer.WriteStartElement("FullData")    '添加次级标签
        writer.WriteStartElement("DataSet")        '添加次次级标签()
        writer.WriteRaw(strXML)        '将刚才转换的dataset字符串XML数据保存到<Dataset>标签中
        writer.WriteEndElement()        '关闭<Dataset>标签
        writer.WriteStartElement("otherData")   '添加保存其他数据的次次级标签(与<DataSet>标签同级)
        writer.WriteElementString("applySign", pic.Pic2String(Me.applySignBox.Image))   '添加该级别标签内的子元素字符串,用来存放picturebox中的图片信息,Pic2String函数参看上一篇博文
        writer.WriteEndElement()        '关闭<otherData>标签
        writer.WriteFullEndElement()    '关闭全部标签
        writer.Close()  '将XML写入文件并关闭writer
    End Sub

    ''' <summary>
    ''' 从XML文件中载入数据到当前winform
    ''' </summary>
    ''' <param name="sender"></param>
    ''' <param name="e"></param>
    ''' <remarks></remarks>
    Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button5.Click
        Dim doc As New Xml.XmlDocument
        doc.Load("d:\test2.xml")    '从指定路径加载XML文件
        Dim strDS As String = doc.SelectSingleNode("/FullData/DataSet").InnerXml    '获取DataSet标签内的数据用来向dataset对象加载数据
        Dim sr As IO.StringReader = New IO.StringReader(strDS)  '由刚才获取到的标签内容字符串创建reader对象
        Me.PiaojuDataSet2.ReadXml(sr)       '向dataset对象中加载xml格式数据,这里比较郁闷的是readxml()方法只能从指定的磁盘文件或者reader类型加载,不能直接从string对象加载,所以有了上一行由string创建的reader这一步

        Dim strPic As String = doc.SelectSingleNode("/FullData/otherData/applySign").InnerXml   '获取applySign标签内存放的图片信息(string格式)
        Me.applySignBox.Image = pic.getPicFromString(strPic)    'string格式图片转换成image并放到picturebox控件里面显示出来,getPicFromString()函数参看前面的博文
    End Sub

算了,还得翻之前的博文,方便查看,还是把image和string相互转换的函数再附上来吧

 ''' <summary>
    ''' image类型到string类型的转换
    ''' </summary>
    ''' <param name="img"></param>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Public Function Pic2String(ByVal img As Image) As String
        Dim ms As New MemoryStream()
        img.Save(ms, Imaging.ImageFormat.Jpeg)
        Dim b() As Byte
        b = ms.GetBuffer
        Dim returnPic As String
        returnPic = Convert.ToBase64String(b)
        ms.Close()
        Return returnPic
    End Function
    ''' <summary>
    ''' string类型到image类型转换
    ''' </summary>
    ''' <param name="strPic"></param>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Public Function getPicFromString(ByVal strPic As String) As Image
        Dim pic As Image
        Dim b() As Byte
        b = Convert.FromBase64String(strPic)
        Dim ms As New MemoryStream(b)
        pic = Image.FromStream(ms)
        ms.Close()
        Return pic
    End Function


Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐