Объединение нескольких XML-документов в один большой с пакетным файлом - PullRequest
3 голосов
/ 21 февраля 2012

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

FOR %%i IN (directory\*.001) DO type %%i >> directory\combo_file.001

К сожалению, это создает ошибку разбора, когда я пытаюсь открыть его в Excel,Я полагаю, что это потому, что много полей и тегов повторяются.Кто-нибудь знает, как мне этого добиться?Мне нужно открыть этот файл только в Excel, поэтому я был бы открыт для конвертации файлов в CSV, если бы это было возможно.

Любая помощь очень ценится, спасибо!

Ответы [ 6 ]

4 голосов
/ 10 августа 2016

Очень простой подход - сделать простую копию:

copy * .xml new.xml

Созданный файл new.xml объединит все файлы xml. Вы можете создать BAT-файл с помощью той же команды

4 голосов
/ 04 декабря 2013

Вот быстрая пакетная команда, которая объединяет все xml-файлы в текущем каталоге в один файл CombineXML.bat. Он оборачивает все файлы XML новым корневым узлом ("").

Однако в вашем случае вы можете не захотеть вводить этот новый слой в XML. Если все, что вы делаете, это просматриваете XML в одной области (например, в веб-браузере), то это работает.

--CombineXML.bat--
@echo on
rem ==clean up==
erase %0.xml
rem ==add the root node==
echo ^<root^> > %0.txt
rem ==add all the xml files==
type *.xml >> %0.txt
rem ==close the root node==
echo ^<^/root^> >> %0.txt
rem ==rename to xml==
ren %0.txt %0.xml
0 голосов
/ 06 июня 2019

И я взял пример из вышеупомянутой пакетной команды, чтобы объединить 100+ из одного каталога в один CSV.и работает очень хорошо.

--CombineXML.bat--
@echo on
rem ==clean up==
erase %0.xml
rem ==add the root node==
echo ^<root^> > %0.txt
rem ==add all the xml files==
type *.xml >> %0.txt
rem ==close the root node==
echo ^<^/root^> >> %0.txt
rem ==rename to csv==
ren %0.txt %0.csv
0 голосов
/ 24 июля 2018

При использовании с ANT задачи будет достаточно:

<echo file="header">&lt;root&gt;
</echo>

<echo file="footer">&lt;/root&gt;
</echo>

<concat destfile="concatenated.xml">
  <fileset file="header"/>

  <fileset dir="....">
    <include name="**/*.xml"/>
  </fileset>

  <fileset file="footer"/>      
</concat> 

Этот код создает общий элемент XML и собирает в нем содержимое любых XML-файлов, которые он находит, в соответствии с набором файлов. Смотри:

0 голосов
/ 04 февраля 2013
<html xmlns:xi="http://www.w3.org/2001/XInclude">
<head>
<title>Book Title</title>
</head>
<body>
<xi:include href="chap1.xml"/>
<xi:include href="chap2.xml"/>
<xi:include href="chap3.xml"/>
</body>
</html>

Когда вы обрабатываете этот файл с помощью xslt, он выглядит как все файлы вместе взятые.

0 голосов
/ 21 февраля 2012

Проблема в том, что у XML есть один начальный тег, такой как: <?xml version="1.0" encoding="UTF-8"?>, который будет повторяться в объединенном документе.Кроме того, если есть корневой тег, который содержит все остальные, при объединении вы включите корневой тег несколько раз.

Я думаю, что было бы очень трудно (если возможно) сделать это в пакетной оболочке, дажеиспользование мощной оболочки и таких команд, как в Linux / Unix (find, grep и т. д.).

Я бы использовал для этого простую программу (скажем, VBA).

edit: я обнаружил, что в Excel вы можете импортировать несколько файлов XML.Вам нужно перейти на вкладку «Разработка» (показать, если она скрыта).Затем в группе XML выберите «Импорт» и выберите несколько файлов XML.Это должно работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...