我正在尝试将元素属性值转换为标签(名称)。例如,从
<test name="testname"/>
到 <testname/>
。神秘的是,这根本不可能发生,我遇到的错误最多,其中包括
xsl:element: The value '$test' of the attribute 'name' is not a valid QName.
是最重要的。
最小示例,xsl:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="xml" version="1.0" indent="yes" encoding="utf-8"/>
<xsl:template match="/">
<xsl:variable name="test">
<xsl:value-of select="/test/@name"/>
</xsl:variable>
<xsl:element name="$test"/>
</xsl:template>
</xsl:stylesheet>
我正在尝试在此测试 xml 上执行它:
<test name="testname"/>
为什么?如果
$test
是硬编码字符串,我可以毫无问题地执行相同操作。这个“qname”是什么以及如何从属性值生成它?
我正在使用 xslt-1.0 和 xsltproc 工具,我正在考虑升级(可能升级到 xalan 或更可能升级到 saxon he)。但我想在 xsltproc 中解决这个问题。
使用属性值模板
<xsl:element name="{$varname}">
或更通用的 <xsl:element name="{xpath-expression}">
。