2017-09-10 184 views
0

嗨,我是新來的XML和我使用xslt刪除名稱空間。下面是輸入代碼。使用xslt刪除命名空間

<ks6:newRequest xmlns:ks6="http://example.com/connector/ssw" xmlns:S="http://schemas.xmlsoap.org/soap/envelope/" 
xmlns:ks3="com.newtech.kake.notification" 
xmlns:ks5="com.newtech.alert" xmlns:ks7="http://notification.newtech.com"> 
    <ks5:new book = "5073"> 
     <ks5:entityId>2314</ks5:entityId> 
     <ks5:entityName>newReq</ks5:entityName> 
    </ks5:new> 
    <ks3:new2> 
     <ks3:entityId>2315</ks3:entityId> 
     <ks3:entityName>newReq2</ks3:entityName> 
    </k3:new2> 
</ks6:newRequest> 

我想要做的是與它的URI即它的xmlns也一起刪除的命名空間KS6和使用的命名空間,而不是KS5 KS6的。 這裏,我的輸出應該看起來如何。

<ks5:newRequest xmlns:S="http://schemas.xmlsoap.org/soap/envelope/" 
    xmlns:ks3="com.newtech.kake.notification" 
    xmlns:ks5="com.newtech.alert" xmlns:ks7="http://notification.newtech.com"> 
     <ks5:new book = "5073"> 
      <ks5:entityId>2314</ks5:entityId> 
      <ks5:entityName>newReq</ks5:entityName> 
     </ks5:new> 
     <ks3:new2> 
      <ks3:entityId>2315</ks3:entityId> 
      <ks3:entityName>newReq2</ks3:entityName> 
     </k3:new2> 
    </ks5:newRequest> 

感謝,

+0

哪個XSLT處理器,您使用哪種XSLT版本,您嘗試了什麼? –

+0

'xsl:element'需要一個'namespace'參數,而xpath有'local-name'等。 – o11c

+0

我使用的是eclipse neon或某個在線編譯器。我沒有任何與xslt有關的工作,它只是第一個也是最後一個,所以我只是希望有人能夠幫助。我已經徹底搜索,但我無法找到我想要的。 –

回答

0

使用XSLT,你必須寫匹配要轉換,爲你的情況,你想改變的元素的命名空間在一定的命名空間的節點模板,想要去除您需要的其他元素的命名空間

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet 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:template match="*"> 
     <xsl:element name="{name()}" namespace="{namespace-uri()}"> 
      <xsl:copy-of select="namespace::*[not(. = 'http://example.com/connector/ssw')]"/> 
      <xsl:apply-templates select="@* | node()"/> 
     </xsl:element> 
    </xsl:template> 

    <xsl:template match="ks6:*" xmlns:ks6="http://example.com/connector/ssw"> 
     <xsl:element name="ks5:{local-name()}" namespace="com.newtech.alert"> 
      <xsl:copy-of select="namespace::*[not(. = 'http://example.com/connector/ssw')]"/> 
      <xsl:apply-templates select="@* | node()"/> 
     </xsl:element> 
    </xsl:template> 

</xsl:stylesheet>