Объединить однотипные XML-файлы в один

Ответить

Код подтверждения
Введите код в точности так, как вы его видите. Регистр символов не имеет значения.

BBCode ВКЛЮЧЁН
[img] ВКЛЮЧЁН
[url] ВКЛЮЧЁН
Смайлики ОТКЛЮЧЕНЫ

Обзор темы
   

Развернуть Обзор темы: Объединить однотипные XML-файлы в один

Re: Объединить однотипные XML-файлы в один

WinMain » 02 ноя 2016, 17:36

Простое склеивание текстовых файлов в один здесь не подойдёт.
Сводный XML-файл должен иметь примерно такую структуру...

[HTML]<?xml version="1.0" encoding="utf-8"?>
<root>
<file1>Данные...</file1>
<file2>Данные...</file2>
<file3>Данные...</file3>
<file4>Данные...</file4>
<file5>Данные...</file5>

</root>[/HTML]Для этого нужно будет написать небольшой скрипт, который будет делать следующее:
- создать выходной XML-файл с заголовочной строкой и пустым корневым тегом.
- найти в указанном каталоге все файлы с расширением .XML, в итоге должен получиться список имён файлов.
- циклом поочерёдно открывать каждый исходный XML-файл и парсером читать данные из его корневого тега.
- добавлять в выходной XML-файл полученные данные в виде дочерних тегов (желательно присваивать каждому тегу уникальное имя).

Такая задачка легко решается на языках типа Java, Python, C#. Программисту средней квалификации на это хватит пары часов.
Но если человек не знаком с программированием, то ему самому это будет не под силу.
Лучше обратиться в раздел "Решите мне задачку" и предложить некоторое вознаграждение.

Re: Объединить однотипные XML-файлы в один

Romeo » 06 окт 2016, 21:02

Да что там разбираться. Если есть файл file1.xml и file2.xml, и нужно их слить и записать результат в файл file_all.xml, то нужно написать следующую команду в командной строке:

Код: Выделить всё

copy file1.xml+file2.xml file_all.xml
Если файлов больше, то их можно добавлять в первый параметр через дополнительные плюсы.

Re: Объединить однотипные XML-файлы в один

Victo » 06 окт 2016, 15:17

Не, я в этом не разберусь. Синтаксис да ещё на английском. Попроще ничё нет? Может какой-то редактор?

Re: Объединить однотипные XML-файлы в один

Victo » 06 окт 2016, 15:14

В файлах хранится информация от одного сайта. Недавно я сбрасывал систему и не сохранил файлы, так как думал на сервере инфа останется. Оказалось что нет. Мне восстановили файлы и теперь мне надо их скрепить. Восстановленные файлы я открывал на компе, вроде с виду такие же как и должны быть. Я так понимаю надо только скрепить. Попробую тем что ты посоветовал, но я вообще не программёр, даже блокнотом никогда не пользовался. Вообщем попробую - если что отпишусь.

Re: Объединить однотипные XML-файлы в один

Romeo » 06 окт 2016, 15:02

Файлы нужно просто склеить или требуется интеллектуальная обработка данных?
Если просто склеить, то склеивать умеет даже простая консольная команда copy (посмотри синтаксис, использующий плюс).
Если же обычной склейки недостаточно, то нужно уже писать программу, здесь ничего не поделаешь.

Re: Объединить однотипные XML-файлы в один

Victo » 06 окт 2016, 14:47

Ребята выручайте, надо объединить несколько файлов xml в один. Уже весь интернет "перерыл", но так и не нашёл ответа. Нашёл прогу которая сравнивает два файла (winmerge называется) и делает их одинаковыми (возможно я не нашёл как переносить данные с одного файла в другой), но мне надо добавить в один. Подскажите как это сделать.

п.с. я не программист

Re: Объединить однотипные XML-файлы в один

Romeo » 12 июн 2016, 21:34

Я бы всё-таки не стал это делать на скрипте, так как, судя по размеру и количеству файлов, такой скрипт будет выполняться до конца света. Самым быстрым с точки зрения выполнения конечно же является компилируемая программа, которая просто открывает файлы, как текстовые, ищет по ключевым тегам и прямо кусками, не распаршивая весь остальной контент, вставляет текст в итоговый большой файл. Но тут, конечно же, потребуются знания в программировании...

Объединить однотипные XML-файлы в один

uzlprog » 07 июн 2016, 22:32

Короче, ситуация: есть очень много (несколько тысяч) однотипных .xml файлов со структурой, как в прикрепленном примере. Структура везде и всегда одна и та же.

Нужно их всех слепить в один полноценный файл.xml Но при этом, удалить из всех файлов в процессе сбора (так чтобы в итоговом не было) некоторые теги. Далее файл должен нормально читаться Exel.

При этом сделать нужно при помощи наиболее универсального (читай - легко редактируемого) средства - то есть как вариант на скрипте CMD, WSH/PoSH, и т.п.


ИЛИ - нужно свести некоторые данные (теги) из всех файлов в одну таблицу (любого читаемого простыми средствами Окон формата).

По дурости своей и ностальгии решил замутить все на обычном CMD, но застрял в процессе: как замутить чтение только части файла, откидывая сразу заголовки:

Код:

Код: Выделить всё

<?xml version="1.0" encoding="WINDOWS-1251"?>
-<journal>-
Есть и более простое решение: поместить все в тег <root>, но не уверен, что Exel переварит такой файл.

А как удалить по маске содержимое тега вместе с ним на голом CMD - вообще не знаю.

Решил смотреть в сторону разпарсинга кучи этих xml в таблицу на PowerShell, о в котором я страшный нубище)))

Накурил такой вот код:

Код:

Код: Выделить всё

$h = @{}

dir *.xml | Foreach {
	$obj = try {Import-Clixml $_.FullName} catch {$null} 
	foreach($i in $obj) {
		$h["$($i.Computer)"] += ,$i.ProcessName
	}
	$obj = $null
}

foreach ($c in $h.Keys) {
	$h[$c] | Group -NoElement | Select-Object @{n="passdate";e={$c}},@{n="id";e={$_.Name}},Count | 
		Export-CSV -Path D:\testxml.csv -Delimiter "`t" -Encoding UTF8 -NoTypeInformation
}

$h.Clear()
Ну что-то не покатило - ибо как вариант очень вероятный - я натупил...

Во общем прошу помощи в решении! Ибо задача срочная и очень объемная.

Вернуться к началу