2016-11-26 6 views
2

別のXSLTスタイルシートを作成するXSLTスタイルシートがあります。最初に作成された出力XSLTには、実行時に設定されるxmlnsプレフィックス/名前空間の定義が必要です。以下は、私が試したものの例ですが、動作していません。 paramsを使用しているときに、alias-xsl:stylesheetにxmlns:$ somePrefix = $ someNamespaceを設定する方法がわかりません。これを行う方法に関するアイデア?私はまた、望ましい出力の例を追加しました。所望の出力のXSLT:エイリアスネームスペースにあるスタイルシートに実行時にxmlns:prefix属性を追加する

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:alias-xsl="http://www.w3.org/1999/XSL/TransformAlias" version="2.0"> 
    <xsl:param name="someNamespace"/> 
    <xsl:param name="somePrefix"/> 
    <xsl:namespace-alias result-prefix="xsl" stylesheet-prefix="alias-xsl"/> 
    <xsl:output indent="yes" method="xml" omit-xml-declaration="yes"/> 
    <xsl:template match="/"> 
    <alias-xsl:stylesheet version="2.0"> 
     <xsl:attribute name="{$somePrefix}"> 
     <xsl:value-of select="$someNamespace"/> 
     </xsl:attribute> 
     <alias-xsl:output method="xml"/> 
     <alias-xsl:template match="/"> 
     <some-output> 
      <alias-xsl:apply-templates/> 
     </some-output> 
     </alias-xsl:template> 
     <xsl:apply-templates/> 
    </alias-xsl:stylesheet> 
    </xsl:template> 
</xsl:stylesheet> 

例($ somePrefix =のxmlns:Sと$ someNamespace = http://example.com):

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0" 
     xmlns:s="http://example.com"> 
    <xsl:output method="xml"/> 
    <xsl:template match="/"> 
    <some-output> 
     <xsl:apply-templates/> 
    </some-output> 
    </xsl:template> 
</xsl:stylesheet> 

答えて

1

次のスタイルシートは、(http://www.freeformatter.com/xsl-transformer.htmlに試み)所望の出力

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:alias-xsl="http://www.w3.org/1999/XSL/TransformAlias" 
    version="2.0"> 
    <xsl:param name="someNamespace">http://example.com</xsl:param> 
    <xsl:param name="somePrefix">s</xsl:param> 
    <xsl:namespace-alias result-prefix="xsl" stylesheet-prefix="alias-xsl"/> 
    <xsl:output indent="yes" method="xml" omit-xml-declaration="yes"/> 
    <xsl:template match="/"> 
    <alias-xsl:stylesheet version="2.0"> 

     <xsl:namespace name="{$somePrefix}" select="$someNamespace"/> 

     <alias-xsl:output method="xml"/> 
     <alias-xsl:template match="/"> 
     <some-output> 
      <alias-xsl:apply-templates/> 
     </some-output> 
     </alias-xsl:template> 
     <xsl:apply-templates/> 
    </alias-xsl:stylesheet> 
    </xsl:template> 
</xsl:stylesheet> 
を生成します

追加されたxsl:namespace行を説明するhttp://www.xmlplease.com/xsl-namespaceを見てみるとよいでしょう。私がsomePrefixパラメータ値をxmlns:sの代わりにsと指定したことに注目してください。

+1

ここに来る他の人々の場合:xsl:namespaceにはXSLT 2.0が必要です。最初の試みが失敗する理由は、データ・モデルでは名前空間ノードと属性ノードが全く異なるものであり、xsl:属性は名前空間ノードではなく属性ノードのみを作成できます。 –

関連する問題