Batch file 使用批处理文件将多个xml文档合并为一个大文档
我有一个包含86个xml文件的目录,这些文件的列和格式与我需要合并成一个大型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
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"><root>
</echo>
<echo file="footer"></root>
</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。