将一行文本添加到xml文件中

时间:2013-10-09 14:48:53

标签: xml batch-file edit

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

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

3 个答案:

答案 0 :(得分:1)

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

我们假设您有一个文件," header.txt"其中包含要添加到每个XML文件顶部的行。你的循环看起来像这样:

for file in *.xml
do
  cat header.txt $file > ${file}_new
  mv ${file}_new $file
done

答案 1 :(得分: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, available for free from Microsoft

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


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

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

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

答案 2 :(得分:0)

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

在一些示例文件上测试它。

@echo off
for %%a in (*.xml) do (
  >"%%a.tmp" echo ^<new header/^>
  type "%%a" >> "%%a.tmp"
)
del *.xml
ren *.tmp *.xml