我想按需生成一个正则表达式模式,但不知何故我失败了。也许有人知道为什么并且可以提供帮助。
我想要实现的是在输出中将定义文本的元素(例如)标记为粗体
源代码:
<?xml version="1.0" encoding="ISO-8859-1"?>
<catalog>
<cd>
<strong>Empire</strong>
<title>Empire Burlesque</title>
<artist>Bob Dylan</artist>
</cd>
<cd>
<strong>your</strong>
<strong>heart</strong>
<title>Hide your heart</title>
<artist>Bonnie Tyler</artist>
</cd>
</catalog>
XSL:
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" indent="no"/>
<xsl:template match="/">
<html>
<body>
<table border="1">
<xsl:for-each select="catalog/cd">
<tr>
<td>
<xsl:call-template name="addBold">
<xsl:with-param name="text" select="title" />
<xsl:with-param name="replace"><xsl:variable name="temp"><xsl:for-each select="strong">|<xsl:value-of select="." /></xsl:for-each></xsl:variable>(<xsl:value-of select='substring-after($temp,"|")' />)</xsl:with-param>
</xsl:call-template>
</td>
<td>
<xsl:value-of select="artist" />
</td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
<xsl:template name="addBold">
<xsl:param name="text" />
<xsl:param name="replace" />
<xsl:analyze-string select="$text" regex="$replace">
<xsl:matching-substring>
<b><xsl:value-of select="regex-group(1)" /></b>
</xsl:matching-substring>
<xsl:non-matching-substring>
<xsl:value-of select="." />
</xsl:non-matching-substring>
</xsl:analyze-string>
</xsl:template>
</xsl:stylesheet>
然后该$replace
参数将包含例如。(your|heart)
. 但它从未在xsl:analyze-string
元素中匹配。
如果我$replace
用硬编码的“ (your|heart)
”替换它总是可以正常工作..
我错过了什么重要的事情吗?就像我不能使用变量/参数作为模式?还是我需要确保它的格式正确?我在调用模板段落中所做的。