我有一个包含 31,000 个 xml 文件的文件夹,我需要在每个文件的顶部添加对样式表的引用。
是否有一种编程方式来打开每个文件,在顶部添加一行代码,保存并转到下一个文件?
我有一个包含 31,000 个 xml 文件的文件夹,我需要在每个文件的顶部添加对样式表的引用。
是否有一种编程方式来打开每个文件,在顶部添加一行代码,保存并转到下一个文件?
如果您使用的是类 Unix 系统,则使用 BASH for 循环和该cat
工具非常简单。
假设您有一个文件“header.txt”,其中包含要添加到每个 XML 文件顶部的行。您的循环将如下所示:
for file in *.xml
do
cat header.txt $file > ${file}_new
mv ${file}_new $file
done
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>
</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/{}'
也将防止覆盖此处的文件。
如果使用 Windows 并且您想在每个文件的开头添加一个新行,那么这应该可以:
在一些示例文件上进行测试。
@echo off
for %%a in (*.xml) do (
>"%%a.tmp" echo ^<new header/^>
type "%%a" >> "%%a.tmp"
)
del *.xml
ren *.tmp *.xml