2012-06-12 7 views
2

У меня есть следующий XMLузел изменения XSLT и добавить пространство имен

<?xml version="1.0"?> 
<location> 
<Destination>Des01</Destination> 
<DesCode>ACD8701</DesCode> 
<UniqueId>023154</UniqueId> 
<Amount>26</Amount> 
</location> 

Я хочу изменить <location> в <abc_ItemUpdate> и добавить пространство имен поэтому выход должен выглядеть следующим образом после использования XSLT

<ns0:abc_ItemUpdate xmlns:ns0="http://schemas.microsoft.com/Sql/2008/05/TypedProcedures/dbo"> 
    <ns0:Destination>Des01</ns0:LegalEntity> 
    <ns0:DesCode>ACD8701</ns0:DesCode> 
    <ns0:UniqueId>023154</ns0:UniqueId> 
    <ns0:Amount>26</ns0:Amount> 
</ns0:abc_ItemUpdate> 

Заранее спасибо

ответ

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

    <xsl:output indent="yes"/> 

<xsl:template match="/location"> 

    <xsl:element name="ns0:abc_ItemUpdate" namespace="http://yournms"> 
     <!-- copy attributes if any --> 
     <xsl:copy-of select="@*"/> 
     <xsl:apply-templates/> 
    </xsl:element> 

</xsl:template> 

<xsl:template match="*"> 
    <xsl:element name="ns0:{name()}" namespace="http://yournms"> 
     <!-- copy attributes if any --> 
     <xsl:copy-of select="@*"/> 
     <xsl:apply-templates/> 
    </xsl:element> 
</xsl:template> 

</xsl:stylesheet> 
+0

спасибо, что это работает как шарм – JohnXsl

+1

Я бы сделал одно небольшое изменение: используйте 'name =" ns0: {local-name()} "', поэтому он по-прежнему работает, если применяется к вводу, который уже использует префиксы пространства имен. –

+0

@MichaelKay хорошая точка спасибо. – JohnXsl

Смежные вопросы