【问题标题】:Combining multiple xml documents into one large one with a batch file使用批处理文件将多个 xml 文档合并为一个大文档
【发布时间】:2012-03-11 18:52:28
【问题描述】:

我有一个包含 86 个 xml 文件的目录,这些文件具有相同的列和格式,我需要将它们组合成一个大的 xml 文件。我对批处理文件非常缺乏经验,我的第一次尝试是简单地将一个文件文本附加到下一个使用...

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

不幸的是,当我尝试在 excel 中打开它时会产生 Parse 错误。我想这是因为许多字段和标签都重复了。有谁知道我如何能够做到这一点?我只需要在 excel 中打开这个文件,所以如果可以的话,我愿意将文件转换为 CSV。

非常感谢任何帮助,谢谢!

【问题讨论】:

  • 如果你这样做,它不会生成一个 xml 文件。多个 xml 标头,没有根,可能损坏的名称空间。你需要一些 xml 感知来做到这一点。可能更容易在 excel 中打开每一个,然后将所需的数据提取到带有某种宏的 Excel 工作表中。

标签: batch-file


【解决方案1】:

我已经从上面的批处理命令中提取了样本,将一个目录中的 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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      复制 *.xml new.xml

      创建的 new.xml 文件会将所有 xml 文件合并在一起。您可以使用相同的命令创建 BAT 文件

      【讨论】:

      • 我是在 Windows 命令提示符下完成的。工作了一个款待。谢谢:)
      • 这很好用,谢谢,不知道为什么它没有被标记为答案。
      • 这在 Windows 10 中不起作用,因为它将文件附加在一起而不是合并 xml。
      【解决方案4】:

      这是一个快速批处理命令,它将当前目录中的所有 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
      

      【讨论】:

        【解决方案5】:
        <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 处理这个文件时,它看起来就像所有文件组合在一起。

        【讨论】:

          【解决方案6】:

          问题在于 XML 有一个单独的起始标记,例如:&lt;?xml version="1.0" encoding="UTF-8"?&gt;,它将在合并的文档中重复出现。此外,如果有一个根标签包含所有其他标签,则合并您将多次包含该根标签。

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

          我会使用一个简单的程序(比如 VBA)来做到这一点。

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

          【讨论】:

          • 感谢您的建议,我只是按照您所说的将所有文件导入到 excel 中,但不幸的是我收到错误“找不到与此数据对应的 XML 映射”。
          • 当您选择多个要导入的 XML 数据文件,并且 Excel 找不到其中一个文件的匹配 XML 映射时,会出现此问题。您可以先导入适当的架构,然后再次导入文件。
          猜你喜欢
          • 1970-01-01
          • 2013-08-23
          • 1970-01-01
          • 2010-10-16
          • 1970-01-01
          • 2021-05-28
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多