2012-06-20 16 views
0

我正在創建一個VB6應用程序,它從XML文件讀取信息,然後將特定文件複製到本地工作站。 XML看起來如下所示;如何在執行任何操作時保存XML文件的副本?

<ArrayOfMediaFile xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <MediaFile> 
    <fileName>Default.jpg</fileName> 
    <filePath>C:\Program Files\media</filePath> 
    <dateModified>2012-04-30T14:41:28.6893988-05:00</dateModified> 
    <Action>Add</Action> 
    </MediaFile> 
    <MediaFile> 
    <fileName>icon.jpg</fileName> 
    <filePath>C:\Program Files\media</filePath> 
    <dateModified>2012-04-30T15:43:31.2995396-05:00</dateModified> 
    <Action>Add</Action> 
    </MediaFile> 
</ArrayOfMediaFile> 

現在我的應用程序讀取的文件名,如果動作節點是「添加」它複製文件,並轉換動作節點「保持」

的問題

什麼,我想現在要做的,就是這個文件保存每次操作後。如果在保存XML時出現任何錯誤,我應該能夠製作一份我可以在操作中再次使用的XML副本。

+2

寫入磁盤,將其添加到集合,存儲在數據庫等等等等。我們在這裏丟失什麼?我認爲你需要解釋爲什麼「保存」這與保存任何東西有所不同?你是在談論XML還是其他的東西,比如你把XML加載到的DOM對象......或者是什麼? – Bob77

+0

嘿鮑勃,XML文件已經存在於本地磁盤上。每當我複製文件時,我都會更改標記的值。然後我保存該文件,以便XML中的值發生更改。我想知道,如果在保存文件時文件損壞,我應該可以備份XML,然後使用該文件。 –

+0

@ Bob Riemersma:是的...我將這個文件加載到一個DOM對象中,這樣我就可以通過讀取操作標籤來解析它並執行所需的操作 –

回答

1

此代碼總是將XML文件.xml備份到.backup,然後如果成功,它將保存到_Processed.xml。希望這就是你想要的。

Private Function ProcessFilesFromXml(ByRef the_sXmlFileName As String) As Boolean 

    Dim nPosDot       As Long 
    Dim sXmlFileNamePrefix    As String 
    Dim sXmlFileNameSuffix    As String 
    Dim oXmlDoc       As MSXML2.DOMDocument 
    Dim oXmlMediaFileNode    As MSXML2.IXMLDOMElement 
    Dim oXmlActionNode     As MSXML2.IXMLDOMElement 

    On Error GoTo ErrorHandler 

    nPosDot = InStr(1, the_sXmlFileName, ".") 

    If (nPosDot) Then 
     sXmlFileNamePrefix = Left$(the_sXmlFileName, nPosDot - 1) 
     sXmlFileNameSuffix = Mid$(the_sXmlFileName, nPosDot) 
    Else 
     sXmlFileNamePrefix = the_sXmlFileName 
     sXmlFileNameSuffix = vbNullString 
    End If 

    ' First of all, back up the XML file <XmlFileList>.xml to <XmlFileList>.backup . Overwrites existing backup file. 
    FileCopy the_sXmlFileName, sXmlFileNamePrefix & ".backup" 

    On Error GoTo ErrorHandler_ProcessingXml 

    ' Load the Xml file <XmlFileList>.xml 
    Set oXmlDoc = New MSXML2.DOMDocument 
    oXmlDoc.Load the_sXmlFileName 

    ' Iterate through each media file, and try to copy it. 
    For Each oXmlMediaFileNode In oXmlDoc.selectNodes("/ArrayOfMediaFile/MediaFile") 
     If Not CopyFileNameToLocalMachine(oXmlMediaFileNode.selectSingleNode("fileName").Text, oXmlMediaFileNode.selectSingleNode("filePath").Text) Then 
      Set oXmlActionNode = oXmlMediaFileNode.selectSingleNode("Action") 
      oXmlActionNode.Text = "keep" 
     End If 
    Next oXmlMediaFileNode 

    ' Save under the name <XmlFileList>_Processed.xml 
    oXmlDoc.save sXmlFileNamePrefix & "_Processed" & sXmlFileNameSuffix 

    ' Since we got here, things must have been fine. 
    ProcessFilesFromXml = True 

Return_ProcessingXml: 
    ' 
Exit Function 

ErrorHandler_ProcessingXml: 
    ProcessFilesFromXml = False 
    Resume Return_ProcessingXml 

ErrorHandler: 
    Err.Raise Err.Number, Err.Source, Err.Description 
End Function 

Private Function CopyFileNameToLocalMachine(ByRef the_sFileName As String, ByRef the_sLocalPath As String) 
    ' Your code here. 
End Function 
相關問題