2016-04-12 13 views
0

投稿する前にgoogleで検索しましたが、回答が見つかりませんでしたので、ここで解決策を投稿して他の開発者にとって役立つようにします。異なる名前空間を持つXSLT出力の子要素

シナリオ: サンプル入力A、B、C あなたは、動的テンプレートマッチングを行っている要素の名前空間を生成する方法

<CarYard> 
     <Cars> 
      <A>honda</A> 
      <B>BMW</B> 
      <C>AUDI</C> 
     </Cars> 
    </CarYard>$ 

。 //テスト:

答えて

0
  <xsl:template match="CarYard">  
      <xsl:apply-templates select="//CarYard/*[1]" mode="addNamespace"/> 
     </xsl:element>   
</xsl:template> 

<xsl:template match="node() | @*" mode="addNamespaceToAllChild"> 
    <xsl:variable name="ELEM_NAME" select="concat('ns1:',local-name())"/> 
    <xsl:element name="{$ELEM_NAME}" xmlns:ns1="http://test.namespace/generic"> 
     <xsl:apply-templates select="@* | node()"/> 
    </xsl:element> 
</xsl:template> 
<xsl:template match="node() | @*" mode="addNamespace"> 
    <xsl:variable name="ELEM_NAME" select="concat('ns1:',local-name())"/> 
    <xsl:element name="{$ELEM_NAME}" xmlns:ns1="http://schemas.test.namespace/generic"> 
     <xsl:apply-templates select="@* | node()" mode="addNamespaceToAllChild"/> 
    </xsl:element> 
</xsl:template> 

今すぐ出たプットは、あなたのコードが1つの名前空間(HTTPでCarYardの子供を置くために、その道の出入りしているようだ

<CarYard> 
    <ns1:Cars> 
     <ns1:A>honda</ns1:A> 
     <ns1:B>BMW</ns1:B> 
     <ns1:C>AUDI</ns1:C> 
    </ns1:Cars> 

+0

になります。ネームスペース/ジェネリック)、他の孫(http://schemas.test.namespace/generic)、孫の孫(もしあれば)があります。しかし、これはあなたの要件またはあなたが示すサンプル出力には反映されません。 –

+0

私が追加するもう一つのことは、あなたがgoogleで検索することによってこの問題を解決しようとするべきであることが少し悲しいことです。 Googleでは、特定のエラーメッセージの意味を追跡するなど、いくつかのプログラミング上の問題にはかなり効果がありますが、実際には新しいプログラミング言語で技術を学ぶ方法ではありません。いくつかの良い本を手に入れ、読んでください! –

関連する問題