+ Ответить в теме
Показано с 1 по 8 из 8

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

  1. #1
    uzlprog is on a distinguished road
    Регистрация
    07.06.2016
    Возраст
    33
    Сообщений
    1
    Вес репутации
    0

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

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

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

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


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

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

    Код:

    Код :
    1. <?xml version="1.0" encoding="WINDOWS-1251"?>
    2. -<journal>-

    Есть и более простое решение: поместить все в тег <root>, но не уверен, что Exel переварит такой файл.

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

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

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

    Код:

    Код :
    1. $h = @{}
    2.  
    3. dir *.xml | Foreach {
    4.     $obj = try {Import-Clixml $_.FullName} catch {$null}
    5.     foreach($i in $obj) {
    6.         $h["$($i.Computer)"] += ,$i.ProcessName
    7.     }
    8.     $obj = $null
    9. }
    10.  
    11. foreach ($c in $h.Keys) {
    12.     $h[$c] | Group -NoElement | Select-Object @{n="passdate";e={$c}},@{n="id";e={$_.Name}},Count |
    13.         Export-CSV -Path D:\testxml.csv -Delimiter "`t" -Encoding UTF8 -NoTypeInformation
    14. }
    15.  
    16. $h.Clear()

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

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

  2. По умолчанию

     
    Хотите избавиться от рекламы? Зарегистрируйтесь
  3. #2
    Moderator Куратор
    system architect
    Romeo is on a distinguished road Аватар для Romeo
    Регистрация
    02.03.2004
    Адрес
    Крым, Севастополь
    Возраст
    36
    Сообщений
    3,057
    Вес репутации
    20

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

    Я бы всё-таки не стал это делать на скрипте, так как, судя по размеру и количеству файлов, такой скрипт будет выполняться до конца света. Самым быстрым с точки зрения выполнения конечно же является компилируемая программа, которая просто открывает файлы, как текстовые, ищет по ключевым тегам и прямо кусками, не распаршивая весь остальной контент, вставляет текст в итоговый большой файл. Но тут, конечно же, потребуются знания в программировании...
    Entites should not be multiplied beyond necessity @ William Occam
    ---
    Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
    ---
    Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.

  4. #3
    dummy Victo is on a distinguished road
    Регистрация
    06.10.2016
    Сообщений
    3
    Вес репутации
    0

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

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

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

  5. #4
    Moderator Куратор
    system architect
    Romeo is on a distinguished road Аватар для Romeo
    Регистрация
    02.03.2004
    Адрес
    Крым, Севастополь
    Возраст
    36
    Сообщений
    3,057
    Вес репутации
    20

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

    Файлы нужно просто склеить или требуется интеллектуальная обработка данных?
    Если просто склеить, то склеивать умеет даже простая консольная команда copy (посмотри синтаксис, использующий плюс).
    Если же обычной склейки недостаточно, то нужно уже писать программу, здесь ничего не поделаешь.
    Entites should not be multiplied beyond necessity @ William Occam
    ---
    Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
    ---
    Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.

  6. #5
    dummy Victo is on a distinguished road
    Регистрация
    06.10.2016
    Сообщений
    3
    Вес репутации
    0

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

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

  7. #6
    dummy Victo is on a distinguished road
    Регистрация
    06.10.2016
    Сообщений
    3
    Вес репутации
    0

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

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

  8. #7
    Moderator Куратор
    system architect
    Romeo is on a distinguished road Аватар для Romeo
    Регистрация
    02.03.2004
    Адрес
    Крым, Севастополь
    Возраст
    36
    Сообщений
    3,057
    Вес репутации
    20

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

    Да что там разбираться. Если есть файл file1.xml и file2.xml, и нужно их слить и записать результат в файл file_all.xml, то нужно написать следующую команду в командной строке:
    Код :
    1. copy file1.xml+file2.xml file_all.xml
    Если файлов больше, то их можно добавлять в первый параметр через дополнительные плюсы.
    Entites should not be multiplied beyond necessity @ William Occam
    ---
    Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
    ---
    Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.

  9. #8
    Moderator Куратор
    system architect
    WinMain will become famous soon enough Аватар для WinMain
    Регистрация
    14.01.2005
    Адрес
    Москва
    Сообщений
    912
    Вес репутации
    15

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

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

    Код HTML:
    <?xml version="1.0" encoding="utf-8"?>
    <root>
      <file1>Данные...</file1>
      <file2>Данные...</file2>
      <file3>Данные...</file3>
      <file4>Данные...</file4>
      <file5>Данные...</file5>
      
    </root>
    Для этого нужно будет написать небольшой скрипт, который будет делать следующее:
    - создать выходной XML-файл с заголовочной строкой и пустым корневым тегом.
    - найти в указанном каталоге все файлы с расширением .XML, в итоге должен получиться список имён файлов.
    - циклом поочерёдно открывать каждый исходный XML-файл и парсером читать данные из его корневого тега.
    - добавлять в выходной XML-файл полученные данные в виде дочерних тегов (желательно присваивать каждому тегу уникальное имя).

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

+ Ответить в теме

Похожие темы

  1. Объединить содержимое папок
    Как сделать так чтобы все что есть в папках dir1 dir2 dir3 скопировалось в папку dir?
    от Tvitvi в разделе Perl, PHP, ASP ...
  2. Паскаль. Типизированные файлы. Текстовые файлы.
    ЗАДАНИЕ 1 Постановка задачи: a)Создать типизированный файл заданной структуры, заполнить его информацией, вывести данные в виде таблицы на экран....
    от maxster в разделе задачи на Паскале и Delphi
  3. Как работает функционал "Сравнить и объединить книги" в Excel?
    какие условия необходимы для возможности сравнения двух книг, листов, читайте как хотите..как в ворде? делаю пункт "исправления", в обоих книгах...
    от LOKI-85 в разделе MS Office и VB(A).
  4. Как объединить таблицы
    Всем, привет! Подскажите, пж., как объединить несколько таблиц из разных файлов. Столбцы одинаковые, просто нужно в одной таблице вывести все строки...
    от WP в разделе MS Office и VB(A).
  5. Еще один топик про XP
    Поставил я себе XP в силу разных причин... Мелких проблем куча, но главная такая: Я никогда не складирую свои проекты в директории с пробелами....
    от Absurd в разделе Операционные системы

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения