Перемещение записи XML из одного файла в другой - PullRequest
0 голосов
/ 02 апреля 2019

У меня есть XML-файл с более чем 1000 записей.Каждая запись имеет около 18 полей, и одно из этих полей является полем даты.Что мне нужно сделать, это переместить записи в другой XML на основе года в поле даты.Например, чтобы все эти записи с 2018 годом были в одном XML, а все записи с 2019 годом - в другом XML.

Код, который у меня работает, кажется, работает, но требует времени для запуска, просто интересноесли есть что-то очевидное, я скучаю.Я сократил код, чтобы он показывал только 4 поля, но код, который я запускаю, имеет 18 полей.

<%
Dim SourceFile
Set SourceFile = Server.CreateObject("Scripting.FileSystemObject") 
If SourceFile.FileExists(Server.MapPath("source.xml")) Then
    Dim TargetFile
    Set TargetFile = Server.CreateObject("Scripting.FileSystemObject") 
    If TargetFile.FileExists(Server.MapPath("target_2018.xml")) Then
        Set SourceXml = Server.CreateObject("Msxml2.DOMDocument.3.0")
        SourceXml.Async = "False"
        SourceXml.Load Server.MapPath("source.xml")
        Set colNodes = SourceXml.selectNodes ("//person")
        For Each objSite In colNodes
            Field1 = objSite.SelectSingleNode("Field1").text
            Field2 = objSite.SelectSingleNode("Field2").text
            Field3 = objSite.SelectSingleNode("Field3").text
            Field4 = objSite.SelectSingleNode("Field4").text
            'FIND THE MATCHING RECORD IN THE SOURCE XML AND REMOVE IT.
            'FIELD4 IS A DATE, MATCHING CRITERIA IS THE YEAR.
            Dim strLast: strLast = Right(Field4, 4)
            If strLast = "2018" Then
                objSite.ParentNode.RemoveChild(objSite)

                i = 1
                Set TargetXml = Server.CreateObject("Msxml2.DOMDocument.3.0") 
                TargetXml.Async = False 
                TargetXml.Load Server.MapPath("target_2018.xml")
                Dim xmlProduct
                Dim CurrentHighestId
                Dim CurrentEntryId
                CurrentHighestId = 1
                For Each xmlProduct In TargetXml.DocumentElement.SelectNodes("person")
                    CurrentEntryId = xmlProduct.SelectSingleNode("Entryid").Text
                    If CurrentEntryId >= CurrentHighestId Then
                        CurrentHighestId = CurrentEntryId + 1
                    End If
                    i = i + 1
                Next

                Dim Entryid
                Entryid = CurrentHighestId

                Dim root
                Set root = TargetXml.DocumentElement
                Set newperson = TargetXml.CreateNode("element", "person", "")
                Dim newtextbox0
                Dim newtextbox1
                Dim newtextbox2
                Dim newtextbox3
                Set newtextbox0 = TargetXml.CreateNode("element", "Field1", "")
                Set newtextbox1 = TargetXml.CreateNode("element", "Field2", "")
                Set newtextbox2 = TargetXml.CreateNode("element", "Field3", "") 
                Set newtextbox3 = TargetXml.CreateNode("element", "field4", "")
                newtextbox0.Text = Entryid
                newtextbox1.Text = Field2
                newtextbox2.Text = Field3
                newtextbox3.Text = Field4
                newperson.AppendChild(newtextbox0)
                newperson.AppendChild(newtextbox1)
                newperson.AppendChild(newtextbox2)
                newperson.AppendChild(newtextbox3)
                root.AppendChild(newperson)
                TargetXml.Save(Server.Mappath("target_2018.xml"))
            Else
            End If

            SourceXml.Save Server.MapPath("source.xml")
        Next
    Else
        Message = "Error - Target file can not be found."
%>
<script type="text/javascript">
alert("<%=Message%>");
</script>
<%
    End If
Else
    Message = "Error - Source file can not be found." %>
<script type="text/javascript">
alert("<%=Message%>");
</script>
<%
End If
%>
...