2016-12-15 70 views
0

我想下面的XML如何刪除的xmlns = 「」 用XSLT映射

<IRheader> 
    <Keys> 
     <Key Type="TaxOfficeNumber">33</Key> 
     <Key Type="TaxOfficeReference">33345</Key> 
    </Keys> 
    <PeriodEnd>2017-02-28</PeriodEnd> 
    <Sender>Company</Sender> 
</IRheader> 

變換成

<IRheader> 
    <Keys> 
     <Key Type="TaxOfficeNumber">33</Key> 
     <Key Type="TaxOfficeReference">33345</Key> 
    </Keys> 
    <PeriodEnd>2017-02-28</PeriodEnd> 
    <IRmark Type="generic"></IRmark> 
    <Sender>Company</Sender> 
</IRheader> 

我使用下面的XSL代碼轉換

<xsl:stylesheet version="1.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="xml" /> 

    <xsl:template match="@*|node()" name="t1"> 
     <xsl:copy> 
      <xsl:apply-templates select="@*|node()" /> 
     </xsl:copy> 
    </xsl:template> 
    <xsl:template match="*[local-name()='PeriodEnd']"> 
     <xsl:call-template name="t1" /> 
     <xsl:element name="IRmark"> 
      <xsl:attribute name="Type"><xsl:text>generic</xsl:text></xsl:attribute> 
     </xsl:element> 
    </xsl:template> 
</xsl:stylesheet> 

後我越來越

<IRheader> 
    <Keys> 
     <Key Type="TaxOfficeNumber">33</Key> 
     <Key Type="TaxOfficeReference">33345</Key> 
    </Keys> 
    <PeriodEnd>2017-02-28</PeriodEnd> 
    <IRmark xmlns="" Type="generic"></IRmark> 
    <Sender>Company</Sender> 
</IRheader> 

請建議如何刪除不需要的xmlns=""

回答

1

如果你把元素在正確的命名空間則namespace聲明一般會自己照顧自己。通常會出現此問題,因爲父元素位於名稱空間中,但IRMark不在。如果您在所需的名稱空間中生成IRMark,那麼名稱空間聲明通常會消失。

在您的示例中,包含的元素看起來不在名稱空間中。由於您的文章顯示沒有證據顯示您瞭解命名空間,因此我想知道您是否將它們從您向我們顯示的代碼中移除,因爲您沒有意識到它們的重要性?如果情況並非如此,那麼我不明白爲什麼會出現undeclaration,我想知道您使用的是哪種XSLT處理器。