Перемещение данных из одного XML - файла в другой.
Привет,
У меня есть xml-файл с более чем 1000 записями. Каждая запись имеет поле даты, и мне нужно разбить этот xml-файл так, чтобы все записи с полем даты за 2018 год находились в одном xml-файле, все записи с полем данных за 2019 год-в другом и т. д. Каждая запись содержит около 18 полей.
Код, который я написал, работает, но занимает больше времени, чем я думал. Просто интересно, не пропустил ли я что-нибудь очевидное, что могло бы замедлить его. Если у кого-то есть какой-то совет, который они могут предложить, это было бы здорово.
Большое спасибо,
Что я уже пробовал:
Урезанная версия кода такова:
&низкотемпературный;%
//УБЕДИТЕСЬ, ЧТО ИСХОДНЫЙ ФАЙЛ СУЩЕСТВУЕТ.
Тусклый Исходный Файл
Установите SourceFile = Сервер.CreateObject("Скриптинг.Filesystemobject, с")
Если Исходный Файл.FileExists(Сервер.MapPath("source.xml")) Затем
//УБЕДИТЕСЬ, ЧТО ЦЕЛЕВОЙ ФАЙЛ СУЩЕСТВУЕТ.
Dim TargetFile
Установите TargetFile = Сервер.CreateObject("Скриптинг.Filesystemobject, с")
Если TargetFile.FileExists(Сервер.MapPath("target_2018.xml")) Затем
//ОТКРОЙТЕ ИСХОДНЫЙ XML-ФАЙЛ
Установите SourceXml = Сервер.Функция createobject("msxml2 описывается.DOMDocument.3.0")
SourceXml.Async = "False"
SourceXml.нагрузку на сервер.MapPath("source.xml")
Набор colNodes = SourceXml.метод selectnodes ("//человек")
Для каждого объекта objSite в colNodes
Поле1=objSite.метод selectsinglenode("Поле1").текст
Поле2=objSite.метод selectsinglenode("Поле2").текст
Поле3=objSite.метод selectsinglenode("Поле3").текст
Поле4=objSite.метод selectsinglenode("Поле4").текст
//НАЙДИТЕ СООТВЕТСТВУЮЩУЮ ЗАПИСЬ В ИСХОДНОМ XML - ФАЙЛЕ И УДАЛИТЕ ЕЕ.
//FIELD4-ЭТО ДАТА, КРИТЕРИИ СООТВЕТСТВИЯ-ЭТО ГОД.
Dim strLast: strLast = справа(поле 4, 4)
Если strLast = "2018", то
objSite.parentNode.метода removechild(objSite)
//ПОЛУЧИТЬ САМЫЙ ВЫСОКИЙ ИДЕНТИФИКАТОР В СПИСКЕ TARGET.XML ФАЙЛ.
i = 1
Установите TargetXml = Сервер.Функция createobject("msxml2 описывается.DOMDocument.3.0")
TargetXml.асинхронный = ложь
TargetXml.нагрузку на сервер.MapPath("target_2018.xml")
Дим xmlProduct
Тусклый Токвысокий
Дим CurrentEntryId
CurrentHighestId = 1
Для каждого xmlProduct в TargetXml.documentElement.selectNodes("person")
CurrentEntryId = xmlProduct.метод selectsinglenode("код элемента").текст
если CurrentEntryId >= CurrentHighestId, то
CurrentHighestId = CurrentEntryId + 1
конец, если
i = i + 1
следующий
Дим Желаемых Результатов
Код Элемента = CurrentHighestId
//ДОБАВЬТЕ СООТВЕТСТВУЮЩУЮ ЗАПИСЬ В ЦЕЛЕВОЙ ФАЙЛ.
Тусклый корень
Установить корень = TargetXml.функцию documentelement
Set newperson = TargetXml.createNode("элемент", "человек", "")
Дим newtextbox0
Дим newtextbox1
Дим newtextbox2
Тусклый newtextbox3
Set newtextbox0 = TargetXml.createNode("элемент", "поле 1", "")
Set newtextbox1 = TargetXml.createNode("элемент", "поле 2", "")
Set newtextbox2 = TargetXml.createNode("элемент", "поле 3", "")
Set newtextbox3 = TargetXml.createNode("элемент", "поле 4", "")
newtextbox0.текст = код элемента
newtextbox1.текст = Поле2
newtextbox2.текст = Поле3
newtextbox3.текст = Поле4
newperson.метода appendChild(newtextbox0)
newperson.метода appendChild(newtextbox1)
newperson.метода appendChild(newtextbox2)
newperson.метода appendChild(newtextbox3)
root.appendChild(newperson)
TargetXml.save(сервер.Mappath("target_2018.xml"))
еще
Конец, если
//СОХРАНИТЕ ИЗМЕНЕНИЯ, ВНЕСЕННЫЕ В ИСХОДНЫЙ ФАЙЛ.
SourceXml.сохранить сервера.MapPath("source.xml")
Следующий
//ПОКАЗАТЬ СООБЩЕНИЕ ОБ ОШИБКЕ, ЕСЛИ ЦЕЛЕВОЙ ФАЙЛ НЕ НАЙДЕН.
еще
Сообщение="Ошибка - целевой файл не найден". %>
alert("<%=Message%>");
&низкотемпературный;%
Конец, если
еще
//ПОКАЗАТЬ СООБЩЕНИЕ ОБ ОШИБКЕ, ЕСЛИ ИСХОДНЫЙ ФАЙЛ НЕ НАЙДЕН.
Сообщение="Ошибка - исходный файл не найден". %>
alert("<%=Message%>");
&низкотемпературный;%
конец, если
%>
RedDk
..- а как выглядит этот код? Никто не собирается предлагать решение этой проблемы без плаката, показывающего какой-то код. Если вы получили сообщение об ошибке, используйте отладчик, чтобы найти, где это произошло. Я набираю точное сообщение об ошибке вместе с кавычками в поисковую систему и всегда получаю обратные возвраты. Это "сообщение об ошибке", которое вы имеете здесь, является ловушкой, встроенной в код. Если вы не получаете ошибок, что вы получаете?