2017-06-15 99 views
2

我有以下XML:XSLT - 刪除重複的命名空間聲明

<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:Signature>第一ds命名空間聲明。以下(<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

省去了重複的命名空間聲明的東西,僅通過複製輸入發生,例如與身份轉變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> 
+3

或更簡單的仍然是