我有一个XML文件,其内容已注释部分。我的要求是使用shell脚本取消注释。任何帮助将受到高度赞赏。
<!--<transportSender name="mailto" class="org.apache.axis2.transport.mail.MailTransportSender">
<parameter name="mail.smtp.from">xx/parameter>
<parameter name="mail.smtp.user">xx</parameter>
<parameter name="mail.smtp.password">xx</parameter>
<parameter name="mail.smtp.host">smtp.gmail.com</parameter>
<parameter name="mail.smtp.port">587</parameter>
<parameter name="mail.smtp.starttls.enable">true</parameter>
<parameter name="mail.smtp.auth">true</parameter>
</transportSender>-->
答案 0 :(得分:2)
使用 xsltproc ,您需要此文件 my.xsl 来处理您的xml输入:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes" encoding="utf-8"/>
<xsl:template match="@*|node()"><!-- identity transformation -->
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="comment()"><!-- comments transformation -->
<xsl:value-of select="."/>
</xsl:template>
</xsl:stylesheet>
假设您的输入文件 my.xml 如下所示:
<?xml version="1.0" ?>
<my-tag>
<!--<transportSender name="mailto" class="org.apache.axis2.transport.mail.MailTransportSender">
<parameter name="mail.smtp.from">xx/parameter>
<parameter name="mail.smtp.user">xx</parameter>
<parameter name="mail.smtp.password">xx</parameter>
<parameter name="mail.smtp.host">smtp.gmail.com</parameter>
<parameter name="mail.smtp.port">587</parameter>
<parameter name="mail.smtp.starttls.enable">true</parameter>
<parameter name="mail.smtp.auth">true</parameter>
</transportSender>-->
</my-tag>
现在,您可以运行下一个命令:
xsltproc my.xsl my.xml | sed -e 's/</</g' -e 's/>/>/g'
sed 转换是恢复'&lt;'所必需的和'&gt;'输出中的字符。
这为您提供以下输出:
<?xml version="1.0" encoding="utf-8"?>
<my-tag>
<transportSender name="mailto" class="org.apache.axis2.transport.mail.MailTransportSender">test
<parameter name="mail.smtp.from">xx/parameter>
<parameter name="mail.smtp.user">xx</parameter>
<parameter name="mail.smtp.password">xx</parameter>
<parameter name="mail.smtp.host">smtp.gmail.com</parameter>
<parameter name="mail.smtp.port">587</parameter>
<parameter name="mail.smtp.starttls.enable">true</parameter>
<parameter name="mail.smtp.auth">true</parameter>
</transportSender>
</my-tag>
如果您不想取消注释所有注释,则可以编写更具体的规则,以仅选择要取消注释的注释节点。如果你不知道如何,只要求它。
答案 1 :(得分:0)
在输出文件中添加特殊字符串转义所需的 disable-output-escaping =“yes” ...
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes" encoding="utf-8"/>
<xsl:template match="@*|node()"><!-- identity transformation -->
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="comment()"><!-- comments transformation -->
<xsl:value-of select="." disable-output-escaping="yes" />
</xsl:template>
</xsl:stylesheet>