编辑XML文件

时间:2012-01-07 18:45:36

标签: batch-file automation macros editing xml

我有一些XML文件,我需要自动编辑它们。

例如

<Content>
<Texts>
<Text id="1">
<en value="blaabla" />
</Text>
<Text id="2">
<en value="blablablablal" />
</Text>
</Texts>
</Content>

我需要复制“en value”行并将这些行添加到它们的下划线,但只需更改一次。

所以当处理完成后,结果应该是:

<Content>
<Texts>
<Text id="1">
<en value="blablabla" />
<fr value="blablabla" />
</Text>
<Text id="2">
<en value="blablablablal" />
<fr value="blablablablal" />
</Text>
</Texts>
</Content>

2 个答案:

答案 0 :(得分:2)

您可以使用此XSLT转换XML文件:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                version="1.0">    
   <xsl:output indent="yes"/>

      <xsl:template match="@*|node()">
        <xsl:copy>
            <xsl:apply-templates select="@*|node()"/>
        </xsl:copy>
      </xsl:template>

    <xsl:template match="en[@value]">
        <xsl:copy>
        <xsl:apply-templates select="@*|node()" />
        </xsl:copy>
        <fr value="{@value}"/>
    </xsl:template>

</xsl:stylesheet>

答案 1 :(得分:1)

$ sed '/<en /p' data.txt | awk '/<en /{if(x++%2)sub(/<en /, "<fr ")}1'
<Content>
<Texts>
<Text id="1">
<en value="blaabla" />
<fr value="blaabla" />
</Text>
<Text id="2">
<en value="blablablablal" />
<fr value="blablablablal" />
  • 使用sed复制包含<en
  • 的行
  • 使用awk将奇数<en更改为<fr

警告: <en ... />必须是一行。