2017-02-06 15 views
0

xmlの子要素の名前空間を置き換えるにはどうすればよいですか? たとえば私は、このソースファイルいる:xslを使用して子要素の名前空間を変更する

<ns:Parent xmlns:ns="http://test.com"> 
    <ns:Name>John</ns:Name> 
    <ns:Country>Japan</ns:Country> 
    <ns:Contact>9999999</ns:Contact> 
</ns:Parent> 

私の出力は次のようにする必要があります:

<ns:Parent xmlns:ns="http://test.com"> 
    <ns1:Name xmlns:ns1="http://development.com">John</ns1:Name> 
    <ns:Country>Japan</ns:Country> 
    <ns:Contact>9999999</ns:Contact> 
</ns:Parent> 

だから、基本的には名前とは別に、他のすべてのフィールドは影響を受けませんでした。すべてのノードをコピー処理する

答えて

1

identity templateとの最初のスタート、あなたがちょうどあなたがあなたの必要な名前空間に新しいノードを作成ns:Nameを一致させるためにテンプレートを追加し、その後

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

を変更したくありません代わり

<xsl:template match="ns:Name"> 
    <ns1:Name> 
     <xsl:apply-templates select="@*|node()"/> 
    </ns1:Name> 
</xsl:template> 

このXSLTを試し(ns1xsl:stylesheet要素で定義される)

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" 
       xmlns:ns="http://test.com" 
       xmlns:ns1="http://development.com"> 
    <xsl:output method="xml" indent="yes" /> 

    <xsl:template match="ns:Name"> 
     <ns1:Name> 
      <xsl:apply-templates select="@*|node()"/> 
     </ns1:Name> 
    </xsl:template> 

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

ありがとうTim!私はこれを試してみよう! –

+0

それはTIMを働いた!このソリューションのおかげでたくさん! –

関連する問題