我有一个XML文件,我正在使用XSL处理以构建PDF。当我尝试使用XSL变量时,我遇到了一个问题。我不确定我是否在错误的范围内使用它,分配错误或者说错了。这是我目前的代码。
<xsl:template name="article-meta-details">
<xsl:choose>
<xsl:when test="/article-meta/oldedition = 1">
<xsl:variable name="section_title" select="'Old'"/>
</xsl:when>
<xsl:otherwise>
<xsl:variable name="section_title" select="'New'"/>
</xsl:otherwise>
</xsl:choose>
<xsl:call-template name="subtitle">
<xsl:value-of select="$section_title" />
</xsl:call-template>
这会产生以下错误:
XPST0008:尚未声明变量section_title
我尝试了另一个在不同线程上找到的解决方案,该解决方案表示在使用之前必须定义变量。我认为它是用xsl:param
来定义它,但这对我产生了类似的结果。
XTSE0010:xsl:param必须立即在模板,函数或中 样式表
我尝试了上面的代码,并在variable
个地方进行了以下更改。
<xsl:param name="section_title" select="'Old'"/>
如果有人可以请指出我做错了什么和/或如何解决它对我来说非常有用。感谢。
哦,这段代码的目标是复制这个功能......
<xsl:template name="article-meta-details">
<xsl:call-template name="subtitle">
<xsl:with-param name="text" select="'Old'"/>
</xsl:call-template>
答案 0 :(得分:4)
错误消息表明您正在使用XSLT 2.0,因此您只需编写:
<html>
<head>
<style>
body {color:blue;}
</style>
</head>
<body>
答案 1 :(得分:3)
这是因为您正在使用过程语言接近变量声明。
XSLT已编译,因此需要确保您的变量存在或不存在。它看到你有条件地宣布它,并且它变得担心。
简单地使变量 value 成为条件,而不是变量的存在本身。
<xsl:variable name="section_title">
<xsl:choose>
<xsl:when test="/article-meta/oldedition = 1">Old</xsl:when>
<xsl:otherwise>New</xsl:otherwise>
</xsl:choose>
</xsl:variable>
答案 2 :(得分:2)
如果有人可以请指出我做错了什么
您的方法的主要问题是范围。当您定义这样的变量时:
<xsl:when test="/article-meta/oldedition = 1">
<xsl:variable name="section_title" select="'Old'"/>
</xsl:when>
仅在您关闭xsl:when
元素之前存在。同样,另一个变量仅存在于xsl:otherwise
标记内。 (如果不是这样的话,两者会发生碰撞,具有相同的名称。)
和/或如何解决它
如果没有看到更广泛的情况,很难提出建议,但是你不可能做到这一点:
<xsl:template name="article-meta-details">
<xsl:call-template name="subtitle">
<xsl:with-param name="text">
<xsl:choose>
<xsl:when test="/article-meta/oldedition = 1">Old</xsl:when>
<xsl:otherwise>New</xsl:otherwise>
</xsl:choose>
</xsl:call-template>
<!-- more? -->
</xsl:template>