从xml中删除签名

时间:2014-08-11 14:52:22

标签: python xml xslt xml-signature

我想从我的xml文件中丢弃签名元素。所以我使用xslt来过滤我的xml文件中的一些元素和标签。我使用xslt和python。 Xslt如下所示:

xslt_root = etree.XML('''\
<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="TimeStamp"/>
                <xsl:template match="@timeStamp"/>
                <xsl:template match="TimeStamps"/>
                <xsl:template match="Signature"/>

                </xsl:stylesheet>
                ''')

问题在于,当我保存结果(更新的)xml文件时,我在xslt规则中定义的所有元素和标签都将被丢弃,除了&#34;签名&#34;剩下的元素。有没有办法从xml文件中丢弃此签名?

1 个答案:

答案 0 :(得分:2)

如果您的Signature元素具有命名空间,例如:

  <Signature xmlns="http://www.w3.org/2000/09/xmldsig#">...</Signature>

然后,您需要调整XSLT以使其与命名空间匹配:

<xsl:stylesheet version="1.0"
                xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                xmlns:s="http://www.w3.org/2000/09/xmldsig#"> <!-- CHANGE #1 -->

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

  <xsl:template match="TimeStamp"/>
  <xsl:template match="@timeStamp"/>
  <xsl:template match="TimeStamps"/>
  <xsl:template match="s:Signature"/>  <!-- CHANGE #2 -->

</xsl:stylesheet>