我有一个31,000 xml文件的文件夹,我需要在每个文件的顶部添加一个样式表的引用。
是否有编程方式打开每个文件,在顶部添加一行代码,保存并转到下一个文件?
答案 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>
</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