如何在xslt中动态设置节点名称

时间:2015-02-17 22:21:02

标签: xslt

我想在XSLT中动态设置节点名称。

我的XSLT看起来像这样:

    <?xml version="1.0" encoding="UTF-8"?>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format">
        <xsl:output method="xml" indent="yes" omit-xml-declaration="yes"/>
        <xsl:template match="/">
        <xsl:variable name="sam" select="elementName"/>
       <Body>
      <xsl:element name="{$sam}">
             <PacketControlInfo>
                  <abc>123</abc>
             </PacketControlInfo>
         </xsl:element>
       </Body>
        </xsl:template>
    </xsl:stylesheet>

Body之后,我希望变量"sam"<xsl:element name="{$sam}">设置节点名称。有人可以帮忙,这样我的输出应该是这样吗?

<Body>
  <elementName>
         <PacketControlInfo>
              <abc>123</abc>
         </PacketControlInfo>
     </elementName>
   </Body>

在上面的XML中可以看到Body下面的节点名称已更改为"elementName",即变量"sam"的值。

1 个答案:

答案 0 :(得分:3)

select属性是XPath表达式。将变量声明为

<xsl:variable name="sam" select="elementName"/>

然后执行<xsl:element name="{$sam}"/>将尝试从输入XML文档根目录中名为elementName的元素的中获取元素名称,如果没有这样的元素它会尝试创建一个名称为空字符串的元素,这是不允许的。

如果要将变量设置为实际字符串“elementName”,则需要额外的引号:

<xsl:variable name="sam" select="'elementName'"/>