我想在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"
的值。
答案 0 :(得分:3)
select
属性是XPath表达式。将变量声明为
<xsl:variable name="sam" select="elementName"/>
然后执行<xsl:element name="{$sam}"/>
将尝试从输入XML文档根目录中名为elementName
的元素的值中获取元素名称,如果没有这样的元素它会尝试创建一个名称为空字符串的元素,这是不允许的。
如果要将变量设置为实际字符串“elementName”,则需要额外的引号:
<xsl:variable name="sam" select="'elementName'"/>