Xslt 使用子字符串应用模板
我正在努力实现以下目标: 解析为模板的字符串值需要缩短。我想缩短值并应用它Xslt 使用子字符串应用模板,xslt,xsl-fo,Xslt,Xsl Fo,我正在努力实现以下目标: 解析为模板的字符串值需要缩短。我想缩短值并应用它 <xsl:template name="replace-strings"> <xsl:param name="text" /> 当我应用$text变量时,代码按预期工作。如何缩短$text变量中的字符串而不影响注释结构?很抱歉,如果这没有太大意义,我仍在尝试使用这种语言。您正在尝试将模板应用于substring-before()
<xsl:template name="replace-strings">
<xsl:param name="text" />
当我应用$text变量时,代码按预期工作。如何缩短$text变量中的字符串而不影响注释结构?很抱歉,如果这没有太大意义,我仍在尝试使用这种语言。您正在尝试将模板应用于
substring-before()返回的字符串。
。您只能在节点上使用xsl:apply-templates
(这是错误消息试图告诉您的)
如果将xsl:apply templates
更改为xsl:value of
,则模板的结果将是缩短的字符串或当前节点的字符串值
(您可能希望字符串值为
$text
。您正在尝试将模板应用于substring-before()
返回的字符串。您只能在节点上使用xsl:apply-templates
(这是错误消息试图告诉您的)
如果将xsl:apply templates
更改为xsl:value of
,则模板的结果将是缩短的字符串或当前节点的字符串值
(您可能需要字符串值
$text
)是否可以选择移动到XSLT 2.0+处理器?这使这类事情变得更容易。不,遗憾的是,这不是一个选项。请发布包含输入和预期输出的内容。您是否可以选择使用XSLT 2.0+处理器?这使这类事情变得容易多了。不,很遗憾,这不是一个选项。请发布一个包含输入和预期输出的帖子。这有效了,谢谢。这有效了,谢谢
<xsl:variable name="cleaned_text">
<xsl:value-of select="substring-before($text, '(~)')" />
</xsl:variable>
<xsl:choose>
<xsl:when test="contains($text,'(~)')">
<xsl:apply-templates select="$cleaned_text" />
</xsl:when>
<xsl:otherwise>
<xsl:apply-templates select="." />
</xsl:otherwise>
</xsl:choose>
ERROR http-nio-8080-exec-2 org.apache.fop.fo.FOTreeBuilder - org.xml.sax.SAXParseException; lineNumber: 0; columnNumber: 0; #STRING cannot be converted to NodeList! (translated)