【问题标题】:Merging xml when xml is in use? (vb.net)使用xml时合并xml? (vb.net)
【发布时间】:2016-04-29 12:52:47
【问题描述】:

我有以下代码,我想用它来将两个 xml 文件合并为一个 xml,但我一直在搞砸它。首先,我想打开 B.xml 并将其与 A.xml 合并。合并后,我想再次将其另存为 C:\A.xml,但是我无法让它覆盖自己,因为它正在使用中。目前,如果文件名不是 C:\A.xml,我只能保存与 B.xml 合并的 A.xml。有没有办法解决这个问题?

        'create a openfile dialog
    Dim open_file As New OpenFileDialog

    'give its filter
    open_file.Filter = "Files (*.xml) | *.xml"
    open_file.Title = "Merge a Library"
    open_file.FileName = "Select a Library..."
    open_file.InitialDirectory = "C:\"

    Try

        'if ok click at opendialog
        If open_file.ShowDialog() = DialogResult.OK Then

            Dim xmlreader1 As New XmlTextReader("C:\A.xml")

            Dim xmlreader2 As New XmlTextReader(open_file.FileName)

            Dim ds1 As New DataSet()
            Try
                ds1.ReadXml(xmlreader1)

                Dim ds2 As New DataSet()
                ds2.ReadXml(xmlreader2)

                ds1.Merge(ds2)
                ds1.WriteXml("C:\A.xml", XmlWriteMode.IgnoreSchema)
                Console.WriteLine("Completed merging XML documents")
            Catch ex As Exception
                Console.WriteLine(ex.Message)
            End Try
            Console.Read()

        End If
    Catch ex As Exception

        'if any problem show error
        MsgBox(ex.Message)
    End Try

【问题讨论】:

  • 在调用ds1.WriteXml 之前处理XmlReader

标签: xml vb.net merge


【解决方案1】:

您正在使用的 xmlTextReader 对象持有 xml 文件的打开句柄。为了释放资源,您需要在两个 XML 阅读器上调用 .Dispose() 方法(下面的第一个示例)。不过,我建议将您的 XMLTextReader 对象放在 Using 块内,该块将自动为您调用 .Dispose() 方法并生成更简洁的代码。

Try
    'if ok click at opendialog
    If open_file.ShowDialog() = DialogResult.OK Then
        Dim xmlreader1 As New XmlTextReader("C:\A.xml")
        Dim xmlreader2 As New XmlTextReader(open_file.FileName)
        Dim ds1 As New DataSet()
        Try
            ds1.ReadXml(xmlreader1)

            Dim ds2 As New DataSet()
            ds2.ReadXml(xmlreader2)

            ds1.Merge(ds2)
            xmlreader1.Dispose()
            ds1.WriteXml("C:\A.xml", XmlWriteMode.IgnoreSchema)
            Console.WriteLine("Completed merging XML documents")
        Catch ex As Exception
            Console.WriteLine(ex.Message)
        Finally
            If xmlreader1.ReadState <> ReadState.Closed Then xmlreader1.Dispose()
            xmlreader2.Dispose()
        End Try
        Console.Read()
    End If
Catch ex As Exception
    'if any problem show error
    MsgBox(ex.Message)
End Try

    Try
        'if ok click at opendialog
        If open_file.ShowDialog() = DialogResult.OK Then
            Dim ds1 As New DataSet()
            Dim ds2 As New DataSet()
            Try
                Using xmlreader1 As New XmlTextReader("C:\A.xml")
                    ds1.ReadXml(xmlreader1)
                End Using

                Using xmlreader2 As New XmlTextReader(open_file.FileName)
                    ds2.ReadXml(xmlreader2)
                End Using

                ds1.Merge(ds2)

                ds1.WriteXml("C:\A.xml", XmlWriteMode.IgnoreSchema)
                Console.WriteLine("Completed merging XML documents")
            Catch ex As Exception
                Console.WriteLine(ex.Message)
            End Try
            Console.Read()
        End If
    Catch ex As Exception
        'if any problem show error
        MsgBox(ex.Message)
    End Try

【讨论】:

    猜你喜欢
    • 2012-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-25
    • 1970-01-01
    • 2017-12-10
    • 2017-01-11
    相关资源
    最近更新 更多