如何在XSLT 1.0中将数字变量设为XML输出的元素名?
如何用XSLT变量的值作为XML输出的元素名称?
我在XSLT代码里定义了名为number的变量,想把这个变量的值作为最终XML输出里的元素名称,请问该怎么实现?
我的XSLT代码
<input> <xsl:variable name="number" value="658976"/> <xsl:element name="{$number}">Hello</xsl:element> </input>
预期输出
<input> <658976>Hello</658976> </input>
说明与修正方案
XML元素名称规范问题:
标准XML规定元素名称不能以数字开头,你预期的<658976>不符合XML语法规范,这类输出会导致XML解析报错。如果必须使用数字相关的元素名,建议添加前缀(比如num_658976)来满足规范要求。XSLT变量定义错误:
原代码里<xsl:variable>使用了value属性,这是不正确的——XSLT中定义变量应该用select属性(用于直接取值),或者把变量值放在标签内容里。
修正后的代码示例
如果要生成符合XML规范的元素:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/"> <input> <xsl:variable name="number" select="'658976'"/> <!-- 添加前缀,符合XML元素命名规范 --> <xsl:element name="num_{$number}">Hello</xsl:element> </input> </xsl:template> </xsl:stylesheet>
输出结果:
<input> <num_658976>Hello</num_658976> </input>
如果你的场景允许使用非标准的数字开头元素名(仅部分宽松解析器支持),修正变量定义后的代码如下:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/"> <input> <xsl:variable name="number" select="'658976'"/> <xsl:element name="{$number}">Hello</xsl:element> </input> </xsl:template> </xsl:stylesheet>
注意:这种数字开头的元素名不具备通用性,多数标准XML解析器会拒绝解析。
内容的提问来源于stack exchange,提问作者stels
相关产品推荐
相关产品推荐

