我尝试使用特定标签中的值作为变量名。但是在转换 xml 时系统给出了 XPath 表达式中未声明的变量异常。
我的 Xml 文件是
<request>
<entityType>individual</entityType>
</request>
Xslt 文件是
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:math="http://www.w3.org/2005/xpath-functions/math"
exclude-result-prefixes="xs math"
version="3.0">
<xsl:param name="individual" static="yes" as="xs:string" select="'1'"/>
<xsl:param name="legal" static="yes" as="xs:string" select="'2'"/>
<xsl:template match="/*">
<xsl:param name="entity" as="xs:string" select="concat('$',entityType)"/>
<xsl:variable name="input" as="xs:string">
<xsl:evaluate xpath="$entity"/>
</xsl:variable>
<HTML><TITLE><xsl:value-of select="$input"/></TITLE></HTML>
</xsl:template>
</xsl:stylesheet>
我期望结果为
<HTML><TITLE>1</TITLE></HTML>
但是我收到“提供给 xsl:evaluate 的 XPath 表达式中出现静态错误:XPath 表达式中未声明的变量”消息。
如果您阅读https://www.w3.org/TR/xslt-30/#dynamic-xpath,那么您会发现它清楚地指出“在
xsl:variable
或xsl:param
元素中的样式表中声明的变量不是在目标表达式的范围内。”。您必须在 xsl:with-param
内使用 xsl:evaluate
和/或 with-params
上的 xsl:evaluate
来声明所需的参数。
<xsl:evaluate xpath="$entity" with-params="map{ QName('', 'individual') : $individual }"/>