繁体   English   中英

在XSL转换中为名称空间使用变量

[英]Use a variable for a namespace in an XSL transform

这可能是重复的,但我没有找到任何其他帖子的答案,所以我会继续问。

在XSL文件中,我希望有变量作为将输出的命名空间。

就像是:

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

然后在模板中,执行以下操作:

<SomeElement xmlns="$some_ns">

即使看起来相当简单,我也没有运气得到这项工作。

谢谢你的时间。

要在运行时动态设置名称空间,请使用<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>

在XSLT 2.0中,您可以使用<xsl:namespace> 但只有在极少数情况下才需要生成未在元素和属性名称中使用的名称空间声明。 要为构造的元素和属性的名称生成动态命名空间,请使用xsl:element或xsl:attribute的namespace属性,这是一个属性值模板,因此可以编写

<xsl:element name="local" namespace="{$var}">

请不要用我的腿打我的腿。 ;)

<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"/>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM