XSLT - 删除重复的名称空间声明

时间:2017-06-15 12:51:32

标签: xml xslt

我有以下xml:

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

问题是,虽然我需要ds中的第一个<ds:Signature>命名空间声明。不需要以下(<ds:SignedInfo><ds:SignedInfoData>)。有没有办法使用XSLT 1.0删除重复的命名空间声明来获取此输出:

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

1 个答案:

答案 0 :(得分:1)

仅通过复制输入就可以消除重复的名称空间声明,例如使用标识转换http://xsltransform.net/jxDigU1/1

<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">

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