당신은 단순히 Description
요소에 문자열 찾고 싶을 경우, 즉 명명 된, 재귀 템플릿을 작성하여 XSLT 1.0 가능합니다 :
<xsl:stylesheet
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:param name="param1" select="'foo'"/>
<xsl:template name="wrap">
<xsl:param name="input"/>
<xsl:param name="search"/>
<xsl:param name="wrapper-element" select="'span'"/>
<xsl:param name="wrapper-style" select="'background-color: papayawhip;'"/>
<xsl:choose>
<xsl:when test="not(contains($input, $search))">
<xsl:value-of select="$input"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="substring-before($input, $search)"/>
<xsl:element name="{$wrapper-element}">
<xsl:if test="$wrapper-style">
<xsl:attribute name="style">
<xsl:value-of select="$wrapper-style"/>
</xsl:attribute>
</xsl:if>
<xsl:value-of select="$search"/>
</xsl:element>
<xsl:call-template name="wrap">
<xsl:with-param name="input" select="substring-after($input, $search)"/>
<xsl:with-param name="search" select="$search"/>
<xsl:with-param name="wrapper-element" select="$wrapper-element"/>
<xsl:with-param name="wrapper-style" select="$wrapper-style"/>
</xsl:call-template>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template match="Description">
<div>
<xsl:call-template name="wrap">
<xsl:with-param name="input" select="."/>
<xsl:with-param name="search" select="$param1"/>
</xsl:call-template>
</div>
</xsl:template>
</xsl:stylesheet>
이러한를 코드를 변환 한 다음
<Root>
<Description>foo bar baz foobar test whatever foo</Description>
</Root>
을
<div><span style="background-color: papayawhip;">foo</span> bar baz <span style="background-color: papayawhip;">foo</span>bar test whatever <span style="background-color: papayawhip;">foo</span></div>
예를 들어 사용자의 요구에 어떻게 든 적응할 수 있습니다. XSLT 2.0의 분석 문자열을 완전히 대체하는 것은 아닙니다.
'$ param'은 어떻게 보이나요? 정규식 지원이 정말로 필요합니까? 아니면 단순히 랩하고자하는 문자열 상수를 찾고 있습니까? –
이것은 단지 문자열 상수입니다. 그래서 기본적으로 검색 키워드 일뿐입니다. 설명 노드의 아무 곳에 나 나타나면 범위를 사용하여 강조 표시하고 싶습니다. – Vinit