2013-05-07 2 views
0

XSLT 2.0을 사용하고 필요한 caracterer 정규식을 추출하려고합니다.Regex XSLT, 일치 항목 추출

나는 tokenize()로 시도했지만 더 수수께끼 같았습니다. 그 결과 바이

<xsl:value-of select="tokenize('2.0-Cloverleaf-3d', '-')" /> 

는 2.0 는 리턴 된 결과는 다음 3 . 문자열은 (2.0-Cloverleaf- * * d)입니다. 에 "만약"?을 요구하지 않고,

<xsl:if test="matches(x:td/x:p, '.+3d$')"> 
    true 
    </xsl:if> 

는 당신이 필요로하는 문자를 얻을 수있는 기능이 있습니까 :

나는이 방법으로 그것을 할 선호 감사.

편집

는 내가 그런 식으로 떠날 것 같아요.

<xsl:variable name="places"> 
    <xsl:if test="matches(x:td/x:p, '.+3d$')">3</xsl:if> 
    <xsl:if test="matches(x:td/x:p, '.+4d$')">4</xsl:if> 
    <xsl:if test="matches(x:td/x:p, '.+5d$')">5</xsl:if> 
</xsl:variable> 

하지만 더 좋은 방법이 있습니다. 고맙습니다.

+1

돌아가고 싶은 문자는 무엇입니까? 난 당신이 단지 문자열이 '3d'로 끝나는 지 확인하고 싶습니다. 왜냐하면 우리는 2.0에서 ends-with()가 하나 더 많은 함수를 가지고 있지만 부울을 반환합니다. 고정 길이가 있다면 substring()을 사용할 수도 있습니다. –

+0

나는 그것을 좋아한다, with-with(). 고맙습니다. –

답변

3

바꾸기를 사용하면 모든 부품을 필요한 부품으로 교체 할 수 있습니다. XPath는 2 년

:

replace(x:td/x:p, '^.*([0-9])d$', '$1') 

XSL에서 :

<xsl:value-of select="replace(x:td/x:p, '^.*([0-9])d$', '$1')" /> 
+0

정확히 내가 필요한 것입니다. 감사합니다 :-). –

0

당신은 tokenize()이 작업을 수행하지만, 먼저 변수로 토큰을 수집 할 수 있습니다.

<xsl:variable name="tokens" select="tokenize(x:td/x:p,'-')"/> 

그런 다음 마지막 토큰을 선택하고 substring()을 사용하여 숫자를 가져옵니다.

<xsl:value-of select="substring(item-at($tokens, 3), 1, 1)" />