【问题标题】:How to dynamically set the node name in xslt如何在xslt中动态设置节点名
【发布时间】:2015-02-17 22:21:01
【问题描述】:

我想在 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"&lt;xsl:element name="{$sam}"&gt;设置。有人可以帮忙,这样我的输出应该是这样的吗?

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

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

【问题讨论】:

  • “动态”部分在哪里?你希望你的变量是一个常数;为什么你需要它?

标签: xslt


【解决方案1】:

select 属性是一个 XPath 表达式。当您将变量声明为

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

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

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

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

【讨论】:

  • 当然,如果你想拥有一个名称是已知字符串的元素,你可以简单地将其作为&lt;elementName&gt; 写入输出并避免所有这些歌舞......
  • @HarikrishnaKalarickel,这将与 &lt;xsl:variable name="sam"&gt;elementName&lt;/xsl:variable&gt; 相同。
猜你喜欢
  • 1970-01-01
  • 2014-09-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-23
  • 1970-01-01
  • 1970-01-01
  • 2022-01-10
相关资源
最近更新 更多