Rovert2000 Ответов: 1

Перемещение данных из одного 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

..- а как выглядит этот код? Никто не собирается предлагать решение этой проблемы без плаката, показывающего какой-то код. Если вы получили сообщение об ошибке, используйте отладчик, чтобы найти, где это произошло. Я набираю точное сообщение об ошибке вместе с кавычками в поисковую систему и всегда получаю обратные возвраты. Это "сообщение об ошибке", которое вы имеете здесь, является ловушкой, встроенной в код. Если вы не получаете ошибок, что вы получаете?

1 Ответов

Рейтинг:
0

Gerry Schmitz

Цитата:
Код, который я написал, работает, но занимает больше времени, чем я думал. Просто интересно, не пропустил ли я что-нибудь очевидное, что могло бы замедлить его. Если у кого-то есть какой-то совет, который они могут предложить, это было бы здорово.


Плохой дизайн. Строить и разрушать. Снова и снова.

Цитата:
Для каждого объекта objSite в colNodes
...

Установите TargetXml = Сервер.Функция createobject("msxml2 описывается.DOMDocument.3.0")

Для каждого xmlProduct в TargetXml.documentElement.selectNodes("person")
...
следующий

...
СЛЕДУЮЩИЙ