使用shell脚本取消xml文件中的注解节

slhcrj9b  于 11个月前  发布在  Shell
关注(0)|答案(2)|浏览(129)

我有一个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>-->
rvpgvaaj

rvpgvaaj1#

使用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/&lt;/</g' -e 's/&gt;/>/g'

sed转换是恢复输出中的“<”和“>”字符所必需的。

这会给你以下输出:

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

如果不想取消所有注解,可以编写一个更具体的规则,只选择要取消注解的注解节点。如果你不知道怎么做,就问我。

moiiocjp

moiiocjp2#

在输出文件中添加**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>

相关问题