オンデマンドで正規表現パターンを生成したいのですが、どういうわけか失敗します。誰かが理由を知っていて、助けてくれるかもしれません。
私が達成したいのは、出力で(例として)太字でマークされるテキストを定義する要素を持つことです
ソース xml:
<?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)
、常に正常に動作します..
私が見逃した重要なことはありますか?変数/パラメータをパターンとして使用できないのですか? または、適切にフォーマットされていることを確認する必要がありますか? これは call-template パラグラフで行いました。