XSLT 错误:提供给 xsl:evaluate 的 XPath 表达式中出现静态错误:XPath 表达式中未声明变量

问题描述 投票:0回答:1

我尝试使用特定标签中的值作为变量名。但是在转换 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 表达式中未声明的变量”消息。

xml xslt xsd xslt-3.0
1个回答
0
投票

如果您阅读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 }"/>
© www.soinside.com 2019 - 2024. All rights reserved.