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 回答