应用带有子字符串的模板
apply-templates with substring
我正在努力实现以下目标:
需要缩短解析为模板的字符串值。我想缩短值并应用它。
<xsl:template name="replace-strings">
<xsl:param name="text" />
(...)
<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)
当我应用 $text 变量时,代码按预期工作。如何在不影响注释结构的情况下缩短 $text 变量中的字符串?抱歉,如果这没有太大意义,我仍在尝试使用这种语言找到自己的方式。
您正在尝试将模板应用于 substring-before()
返回的字符串。您只能在节点上使用 xsl:apply-templates
(这是错误消息试图告诉您的内容)。
如果将 xsl:apply-templates
更改为 xsl:value-of
,则模板的结果将是缩短的字符串或当前节点的字符串值。
(您可能需要 $text
的字符串值。)
我正在努力实现以下目标: 需要缩短解析为模板的字符串值。我想缩短值并应用它。
<xsl:template name="replace-strings">
<xsl:param name="text" />
(...)
<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)
当我应用 $text 变量时,代码按预期工作。如何在不影响注释结构的情况下缩短 $text 变量中的字符串?抱歉,如果这没有太大意义,我仍在尝试使用这种语言找到自己的方式。
您正在尝试将模板应用于 substring-before()
返回的字符串。您只能在节点上使用 xsl:apply-templates
(这是错误消息试图告诉您的内容)。
如果将 xsl:apply-templates
更改为 xsl:value-of
,则模板的结果将是缩短的字符串或当前节点的字符串值。
(您可能需要 $text
的字符串值。)