5

これはおそらく重複していますが、他の投稿からの回答が見つからなかったので、質問します.

XSL ファイル内に、出力される名前空間である変数が必要です。

何かのようなもの:

<xsl:variable name="some_ns" select="'http://something.com/misc/blah/1.0'" />

次に、テンプレートで次のようにします。

<SomeElement xmlns="$some_ns">

かなり単純に思えますが、私はこの仕事を得ることができませんでした。

御時間ありがとうございます。

4

3 に答える 3

8

実行時に名前空間を動的に設定する<xsl:element>には、属性値テンプレートを使用します。

<xsl:element name="SomeElement" namespace="{$some_ns}">
  <!-- ... -->
</xsl:element>

動的名前空間を設定する必要がない場合は、それらのプレフィックスを宣言して使用します。

<xsl:stylesheet 
  version="2.0" 
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
  xmlns:foo="http://something.com/misc/blah/1.0"
>
  <xsl:template match="/">
    <foo:SomeElement>
      <!-- ... -->
    </foo:SomeElement>
  </xsl:template>
</xsl:stylesheet>

または、名前空間をデフォルトとしてマークすることもできます:

<xsl:stylesheet 
  version="2.0" 
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
  xmlns="http://something.com/misc/blah/1.0"
>
  <xsl:template match="/">
    <SomeElement>
      <!-- ... -->
    </SomeElement>
  </xsl:template>
</xsl:stylesheet>
于 2013-11-06T23:34:10.227 に答える
3

XSLT 2.0 では、 を使用できます<xsl:namespace>。ただし、要素と属性の名前で使用されていない名前空間宣言を生成する必要があるというまれなケースでのみ必要になります。構築された要素と属性の名前に対して動的な名前空間を生成するには、xsl:element または xsl:attribute の名前空間属性を使用します。これは属性値のテンプレートであり、記述できるようになっています。

<xsl:element name="local" namespace="{$var}">
于 2013-11-07T08:40:40.443 に答える
1

あなたの足でも、私の足でも、私を殴らないでください。;)

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="xml" encoding="utf-8"/>
    <xsl:variable name="some_ns" select="'http://something.com/misc/blah/1.0'" />                       
    <xsl:template match="/">
        <!-- variant for output method="text" that doesn't generate xml declaration -->
        <!--xsl:value-of select="'&#60;element xmlns=&#34;'"/>
        <xsl:value-of select="$some_ns"/>
        <xsl:value-of select="'&#34;&#47;&#62;'"/-->
        <xsl:value-of disable-output-escaping="yes" select="'&#60;element xmlns=&#34;'"/>
        <xsl:value-of select="$some_ns"/>
        <xsl:value-of disable-output-escaping="yes" select="'&#34;&#47;&#62;'"/>
    </xsl:template>
</xsl:stylesheet>

生産する

<?xml version="1.0" encoding="utf-8"?>
<element xmlns="http://something.com/misc/blah/1.0"/>
于 2013-11-06T23:52:52.733 に答える