Удаление подписи из xml

Я хотел бы удалить элемент подписи из моих 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, будут отброшены, кроме элемента «Подпись», который остается. Есть ли способ удалить эту подпись из XML-файла?


person Orcl User    schedule 11.08.2014    source источник
comment
Пожалуйста, опубликуйте свой исходный XML - вместе с выводом XML, который вы получите, по сравнению с тем, что вы ожидали. В противном случае мы не сможем вам помочь. Спасибо!   -  person Mathias Müller    schedule 11.08.2014


Ответы (1)


Если ваш элемент 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>
person kjhughes    schedule 12.08.2014
comment
Хорошая идея, но она не сработала. Я добавил пространство имен, как вы упомянули. - person Orcl User; 13.08.2014