Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file 使用批处理文件将多个xml文档合并为一个大文档_Batch File - Fatal编程技术网

Batch file 使用批处理文件将多个xml文档合并为一个大文档

Batch file 使用批处理文件将多个xml文档合并为一个大文档,batch-file,Batch File,我有一个包含86个xml文件的目录,这些文件的列和格式与我需要合并成一个大型xml文件的列和格式相同。我对批处理文件非常缺乏经验,我的第一次尝试是使用 FOR %%i IN (directory\*.001) DO type %%i >> directory\combo_file.001 不幸的是,当我试图在excel中打开它时,这会产生一个解析错误。我想这是因为许多字段和标记都是重复的。有人知道我怎样才能做到这一点吗?我只需要在excel中打开这个文件,所以我可以将文件转换为CS

我有一个包含86个xml文件的目录,这些文件的列和格式与我需要合并成一个大型xml文件的列和格式相同。我对批处理文件非常缺乏经验,我的第一次尝试是使用

FOR %%i IN (directory\*.001) DO type %%i >> directory\combo_file.001
不幸的是,当我试图在excel中打开它时,这会产生一个解析错误。我想这是因为许多字段和标记都是重复的。有人知道我怎样才能做到这一点吗?我只需要在excel中打开这个文件,所以我可以将文件转换为CSV,如果这是一个选项的话


非常感谢您的帮助,谢谢

问题在于XML有一个单一的起始标记,如:这将在合并的文档上重复。此外,如果有一个根标记包含所有其他标记,则合并时将多次包含根标记

我认为,如果可能的话,在批处理shell中实现这一点是非常困难的,即使使用功能强大的shell和Linux/Unix find、grep等命令也是如此

我会用一个简单的程序,比如说VBA来实现

编辑:我发现在Excel中可以导入多个xml文件。如果隐藏,则必须转到“开发”选项卡显示它。然后在XML组中,选择导入并选择多个XML文件。这应该行得通

<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处理这一个文件时,它看起来像是所有文件的组合。

这里有一个快速批处理命令,它将当前目录中的所有xml文件组合成一个文件CombineXML.bat。它用一个新的根节点包装所有XML文件

但是,在您的情况下,您可能不希望将这个新层引入XML。 如果您所做的只是在单个区域(例如:在web浏览器中)查看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

一个非常简单的方法是做一个简单的复制:

复制*.xml new.xml

创建的新.xml文件将合并所有xml文件。您可以使用相同的命令创建BAT文件

当与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文件的内容。见:

*
我从上面的批处理命令中获取了一个示例,将一个目录中的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

如果这样做,它就不会生成xml文件。多个xml头,没有根,可能会有中断的名称空间。要做到这一点,您需要有xml意识。在excel中打开每个文件,然后用某种宏将所需的数据提取到一个excel工作表中可能会更容易。谢谢你的建议,我只是按照你说的将所有文件导入excel,但不幸的是,我遇到错误“找不到与此数据对应的XML映射”。当您选择要导入的多个XML数据文件,并且Excel找不到其中一个文件的匹配XML映射时,就会出现此问题。您可以先导入适当的架构,然后再导入文件。我是在Windows命令提示符下完成的。工作很愉快。谢谢:这非常有效,谢谢,不知道为什么它没有被标记为答案。这在Windows 10中不起作用,因为它将文件附加在一起,而不是合并xml。