0

我有一个包含 31,000 个 xml 文件的文件夹,我需要在每个文件的顶部添加对样式表的引用。

是否有一种编程方式来打开每个文件,在顶部添加一行代码,保存并转到下一个文件?

4

3 回答 3

1

如果您使用的是类 Unix 系统,则使用 BASH for 循环和该cat工具非常简单。

假设您有一个文件“header.txt”,其中包含要添加到每个 XML 文件顶部的行。您的循环将如下所示:

for file in *.xml
do
  cat header.txt $file > ${file}_new
  mv ${file}_new $file
done
于 2013-10-09T14:59:18.100 回答
1

Clean将使用 XML 感知工具。

<!-- save as add_stylesheet.xsl -->
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="node() | @*">
        <xsl:copy>
            <xsl:apply-templates select="node() | @*" />
        </xsl:copy>
    </xsl:template>

    <!-- at the top level of the document... --> 
    <xsl:template match="/">
        <!-- unless a stylesheet reference already exists -->
        <xsl:if test="not(processing-instruction('xml-stylesheet'))">
            <!-- ...create the stylesheet reference --> 
            <xsl:processing-instruction name="xml-stylesheet">
                <xsl:text>type="text/xsl" href="foo.xsl"</xsl:text>
            </xsl:processing-instruction>
            <xsl:text>&#xA;</xsl:text>
        </xsl:if>

        <!-- ...then copy the rest of the document --> 
        <xsl:apply-templates select="node() | @*" />
    </xsl:template>
</xsl:stylesheet>

然后,在 Windows 下

for /F "delims=" %f in ('dir /b *.xml') do msxsl "%f" add_stylesheet.xsl -o "%f"

这使用msxsl.exe,可从 Microsoft 免费获得

请注意,此命令会覆盖原始文件。用于-o "output\%f"将文件写入不同的目录(在本例中为“输出”)。


同样的事情在 Linux 下也可以工作,命令行会有所不同。

find . -type f -name \*.xml -exec xsltproc -o '{}' add_stylesheet.xsl '{}' \;

使用-o './output/{}'也将防止覆盖此处的文件。

于 2013-10-09T15:25:37.203 回答
0

如果使用 Windows 并且您想在每个文件的开头添加一个新行,那么这应该可以:

在一些示例文件上进行测试。

@echo off
for %%a in (*.xml) do (
  >"%%a.tmp" echo ^<new header/^>
  type "%%a" >> "%%a.tmp"
)
del *.xml
ren *.tmp *.xml
于 2013-10-11T04:04:03.593 回答