Как объединить XML-файлы?
у меня есть два xml-файла, которые имеют одинаковую схему, и я хотел бы объединить в один xml-файл. Существует ли простой способ сделать это?
= новый файл, содержащий
6 ответов
«автоматическое слияние XML» звучит как относительно простое требование, но когда вы вдаетесь во все детали, это становится сложным довольно быстро. Слияние с c# или XSLT будет намного проще для более конкретной задачи, как в ответ для модели EF. Использование инструментов для ручного слияния также может быть вариантом (см. это так вопрос).
Для справки (и дать представление о сложности) вот пример с открытым исходным кодом из Java world:XML-файле слияние сделано легко
вернемся к исходному вопросу. В спецификации задачи мало больших серых областей: когда следует учитывать 2 элемента эквивалентно (имеют одинаковое имя, совпадающие выбранные или все атрибуты, или также имеют одинаковую позицию в родительском элементе); как обрабатывать ситуацию, когда исходный или объединенный XML имеют несколько эквивалентно элементы etc.
код ниже предполагает, что
- мы только заботьтесь об элементах на данный момент
- элементы эквивалентно если имена элементов, имена атрибутов и значения атрибутов совпадают
- элемент не имеет несколько атрибутов с одинаковым именем
- все эквивалентно элементы из Объединенного документа будут объединены с первым эквивалентным элементом в исходном XML-документе.
Он будет производить желаемого результата с исходные фрагменты XML, но если входные XMLs более сложны и имеют повторяющиеся элементы, результат будет больше. интересно:
вот объединенный документ, показывающий, как эквивалентно элементы из документа B были объединены:
Если формат всегда точно такой, в этом методе нет ничего плохого:
удалите последние две строки из первого файла и добавьте вторые файлы при удалении первых двух строк.
посмотрите на команды Linux head и tail который может удалить первую и последние две строки.
Это простое преобразование XSLT что-то вроде этого (которое вы применяете к документу a.xml):
vimdiff file_a file_b приведу лишь один пример:
BeyondCompare является любимым, когда я на windows http://www.scootersoftware.com/
Я закончил использование C# и создал себе скрипт. Я знал, что могу это сделать, когда задавал вопрос, но я хотел знать, есть ли более быстрый способ сделать это, так как я никогда не работал с XML.
сценарий пошел по строкам этого:
и MergeNodes() выглядело примерно так:
его не идеально — я должен вручную указать узлы, которые я хочу объединить, но это было быстро и легко для меня, чтобы собрать и так как у меня есть почти не знаю XML, я счастлив:)
на самом деле лучше, что он объединяет только указанные узлы, так как я использую его для слияния edmx-файлов Entity Framework, и я действительно хочу объединить ssdl, CDSL и MSL-узлы.
способ, которым вы могли бы это сделать, — загрузить набор данных с xml и объединить наборы данных.
Developing.ru
Короче, ситуация: есть очень много (несколько тысяч) однотипных .xml файлов со структурой, как в прикрепленном примере. Структура везде и всегда одна и та же.
Нужно их всех слепить в один полноценный файл.xml Но при этом, удалить из всех файлов в процессе сбора (так чтобы в итоговом не было) некоторые теги. Далее файл должен нормально читаться Exel.
При этом сделать нужно при помощи наиболее универсального (читай — легко редактируемого) средства — то есть как вариант на скрипте CMD, WSH/PoSH, и т.п.
ИЛИ — нужно свести некоторые данные (теги) из всех файлов в одну таблицу (любого читаемого простыми средствами Окон формата).
По дурости своей и ностальгии решил замутить все на обычном CMD, но застрял в процессе: как замутить чтение только части файла, откидывая сразу заголовки:
Есть и более простое решение: поместить все в тег <root>, но не уверен, что Exel переварит такой файл.
А как удалить по маске содержимое тега вместе с ним на голом CMD — вообще не знаю.
Решил смотреть в сторону разпарсинга кучи этих xml в таблицу на PowerShell, о в котором я страшный нубище)))
Накурил такой вот код:
Ну что-то не покатило — ибо как вариант очень вероятный — я натупил.
Во общем прошу помощи в решении! Ибо задача срочная и очень объемная.
Ребята выручайте, надо объединить несколько файлов xml в один. Уже весь интернет «перерыл», но так и не нашёл ответа. Нашёл прогу которая сравнивает два файла (winmerge называется) и делает их одинаковыми (возможно я не нашёл как переносить данные с одного файла в другой), но мне надо добавить в один. Подскажите как это сделать.
п.с. я не программист
Простое склеивание текстовых файлов в один здесь не подойдёт.
Сводный XML-файл должен иметь примерно такую структуру.
</root>[/HTML]Для этого нужно будет написать небольшой скрипт, который будет делать следующее:
— создать выходной XML-файл с заголовочной строкой и пустым корневым тегом.
— найти в указанном каталоге все файлы с расширением .XML, в итоге должен получиться список имён файлов.
— циклом поочерёдно открывать каждый исходный XML-файл и парсером читать данные из его корневого тега.
— добавлять в выходной XML-файл полученные данные в виде дочерних тегов (желательно присваивать каждому тегу уникальное имя).
Такая задачка легко решается на языках типа Java, Python, C#. Программисту средней квалификации на это хватит пары часов.
Но если человек не знаком с программированием, то ему самому это будет не под силу.
Лучше обратиться в раздел «Решите мне задачку» и предложить некоторое вознаграждение.
Объединитель документов
Объединяйте документы онлайн с любого устройства с помощью современного браузера, такого как Chrome, Firefox.
Отправить ссылку на скачивание
- Выберите порядок объединенных файлов
- Простое объединение нескольких документов
- Объединение файлов в один документ
- Загрузка или отправка результирующего файла в виде вложения электронной почты
Бесплатное Windows-приложение для конвертации, просмотра, объединения файлов
- Конвертируйте, просматривайте и объединяйте файлы на Вашем компьютере с ОС Windows.
- Обрабатывайте файлы Word, Excel, PowerPoint, PDF и более 100 других форматов файлов.
- Без ограничений по размеру файла.
- Пакетное преобразование нескольких файлов.
- Одно приложение с богатыми функциями, такими как преобразование, просмотр, слияние, анализатор, сравнение, подпись.
- Регулярные БЕСПЛАТНЫЕ обновления с новыми функциями приходят каждый месяц.
Как объединить документы онлайн
- Выберите или перетяните документы, которые необходимо объединить.
- После завершения загрузки документов можно изменить очередность их объединения перетаскивая иконку документа в области предпросмотра.
- Нажмите на кнопку Объединить.
- Нажмите кнопку Скачать и сохраните объединенный документ.
ВОПРОСЫ И ОТВЕТЫ
Другие форматы, поддерживаемые GroupDocs.Merger
Вы также можете объединять документы других форматов. Полный список представлен ниже.