使用shell xmlstarlet从xml文件中删除最后一个逗号

时间:2014-07-31 14:51:42

标签: xml bash shell xmlstarlet

我的comp.xml文件包含

<project name="installer" >
<property name="workflow.list" >
 BTCH.WF_BatchRequest_Process.BatchRating,
 BTCH.WF_BatchRequest_Process.Invoice,
</property>
<property name="wfGroup.list" >
BTCH.WFG_BatchResPrep,
BTCH.WFG_BatchRes,
</property>
<target name="shutdown">
<echo>shutdown</echo>    
</target>  
</project>

我需要删除最后一次&#39;&#39;如果该逗号存在,则使用shell 在每个<property>标记中使用逗号 所以它应该是:

<project name="installer" >
<property name="workflow.list" >
BTCH.WF_BatchRequest_Process.BatchRating,
BTCH.WF_BatchRequest_Process.Invoice
</property>
<property name="wfGroup.list" >
BTCH.WFG_BatchResPrep,
BTCH.WFG_BatchRes
</property>
<target name="shutdown">
<echo>shutdown</echo>    
</target>  
</project>

1 个答案:

答案 0 :(得分:2)

如果您知道属性值将始终以<comma><newline>结尾,则以下xslt适用于我(至少在您的样本数据上)。

<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>

    <xsl:template match="property">
        <xsl:copy>
            <xsl:value-of select="substring(text(), 1, string-length(text()) - 2)"/><xsl:text>
</xsl:text>
        </xsl:copy>
    </xsl:template>
</xsl:stylesheet>

以上大多数只是identity transformation。剩下的就是property元素和少量文本操作的匹配。