在XSL中匹配和替换字符串



我不是XSL专家。我需要匹配一个字符串并将其替换为URL。字符串的形式应该是2个字母+8个数字,所以类似于VA12345678。

以下是到目前为止我所拥有的(XSL和HTML在同一个文件中(:

<xsl:variable name="fubar" select="'testing VA12345678'" />
<xsl:variable name="fubarNew">
<xsl:call-template name="replace">
<xsl:with-param name="in" select="$fubar" />
<xsl:with-param name="old" select="'regex will go here'" />
<xsl:with-param name="new" select="'<a href='/cs/page.asp?id=VA12345678'>VA12345678</a>" />
</xsl:call-template>
</xsl:variable>

<span><xsl:value-of select="$fubarNew" /></span>

fubarNew应该看起来像testing VA12345678,VA12345678链接到/cs/page.asp?id=VA12345678

如何在此处添加regex?

您的问题很不清楚。

如果您想用<a href="/cs/page.asp?id=@@########">@@########</a>形式的锚元素替换@@########形式的字符串(2个大写ASCII字符后跟8位数字(的每次出现,那么考虑以下示例:

输入

<root>
<string>Lorem ipsum dolor sit amet, consectetuer ABC123 adipiscing elit.</string>
<string>Nam interdum ante quis VA12345678 erat pellentesque elementum. Ut molestie quam sit DT87654321 amet ligula.</string>
<string>In enim. XY55551234 Duis dapibus hendrerit quam.</string>
</root>

XSLT 2.0

<xsl:stylesheet version="2.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>
<!-- identity transform -->
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="string">
<xsl:copy>  
<xsl:analyze-string select="." regex="[A-Z]{{2}}d{{8}}" >
<xsl:matching-substring>
<a href="/cs/page.asp?id={.}">
<xsl:value-of select="." />
</a>
</xsl:matching-substring>
<xsl:non-matching-substring>
<xsl:value-of select="." />
</xsl:non-matching-substring>
</xsl:analyze-string>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>

结果

<?xml version="1.0" encoding="UTF-8"?>
<root>
<string>Lorem ipsum dolor sit amet, consectetuer ABC123 adipiscing elit.</string>
<string>Nam interdum ante quis <a href="/cs/page.asp?id=VA12345678">VA12345678</a> erat pellentesque elementum. Ut molestie quam sit <a href="/cs/page.asp?id=DT87654321">DT87654321</a> amet ligula.</string>
<string>In enim. <a href="/cs/page.asp?id=XY55551234">XY55551234</a> Duis dapibus hendrerit quam.</string>
</root>

最新更新