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)