我有数百个xml文件,我想在特定的地方进行一次编辑。在每个xml文件的某个地方,我都有类似的东西。
<SomeTag
attribute1 = "foo"
attribute2 = "bar"
attribute3 = "lol"/>
属性的数量及其名称会根据文件而变化,但SomeTag
不会。我想在最后一个属性后添加另一个属性。
我意识到编辑xml这种方式很愚蠢,但是我只想做一些像sed
这样的工作,但是我无法弄清楚多行的用法。 / p>
答案 0 :(得分:3)
我会使用转换样式表和身份模板(XSLT)。
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="SomeTag">
<xsl:copy>
<xsl:attribute name="newAttribute">
<xsl:value-of select="'whatever'"/>
</xsl:attribute>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
这将复制整个XML,但会运行“SomeTag”的定义模板。
取自here
答案 1 :(得分:2)
您可以使用XML shell xsh:
for my $file in { glob "*.xml" } {
open $file ;
for //SomeTag set @another 'new value' ;
save :b ;
}
答案 2 :(得分:1)
如果您的输入文件非常简单且格式一致:
$ cat file
foo
<SomeTag
attribute1 = "foo"
attribute2 = "bar"
attribute3 = "lol"/>
bar
$ gawk -v RS='\0' -v ORS= '{sub(/<SomeTag[^/]+/,"&\n attribute4 = \"eureka\"")}1' file
foo
<SomeTag
attribute1 = "foo"
attribute2 = "bar"
attribute3 = "lol"
attribute4 = "eureka"/>
bar