2009-07-01 4 views
12

바꾸기 기능을 사용하여 정규식 일치를 수행하고 바꿀 XSLT 변환을 작성했습니다.XSLT 바꾸기 함수를 찾을 수 없음

그러나, 비주얼 스튜디오 2008 '() 대신'

이보고 알 수없는 XSLT 기능입니다.

코드 자체의 비트입니다 : 내가 잘못하고있는 중이 야 아무것도

<xsl:otherwise> 
    <td style="border: solid 1px black; background-color:#00CC66;"> 
      <xsl:variable name="FeatureInfo" select="Text" /> 
       <xsl:value-of select="replace($FeatureInfo,'Feature=','TESTING')"/> 
    </td> 
</xsl:otherwise> 

있습니까?

감사합니다 :)

편집 : XSLT의이 버전을 사용하고 있지만,이 문제가 비주얼 스튜디오 버전처럼 보이는 ... 내가 해결 방법을 찾으려고해야합니다.

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 

답변

30

replace 함수는 XSLT 버전 2.0에서만 사용할 수 있고 버전 1.0 which is what Visual Studio uses에서는 사용할 수 없습니다. version="2.0"을 지정했다고해서 Visual Studio에서 지원한다는 의미는 아닙니다.

Here's a template on codesling that implements string-replace in XSLT 1.0. 당신은 그것을 사용할 수 있어야하지만 효율성을 보장 할 수는 없습니다. (위의 링크에서 촬영)

<xsl:template name="string-replace-all"> 
    <xsl:param name="text"/> 
    <xsl:param name="replace"/> 
    <xsl:param name="by"/> 
    <xsl:choose> 
    <xsl:when test="contains($text,$replace)"> 
     <xsl:value-of select="substring-before($text,$replace)"/> 
     <xsl:value-of select="$by"/> 
     <xsl:call-template name="string-replace-all"> 
     <xsl:with-param name="text" select="substring-after($text,$replace)"/> 
     <xsl:with-param name="replace" select="$replace"/> 
     <xsl:with-param name="by" select="$by"/> 
     </xsl:call-template> 
    </xsl:when> 
    <xsl:otherwise> 
     <xsl:value-of select="$text"/> 
    </xsl:otherwise> 
    </xsl:choose> 
</xsl:template> 

당신은 다음과 같이 호출 것 :

<xsl:otherwise> 
    <td style="border: solid 1px black; background-color:#00CC66;"> 
    <xsl:variable name="FeatureInfo" select="Text" /> 
    <xsl:call-template name="string-replace-all"> 
     <xsl:with-param name="text" select="$FeatureInfo"/> 
     <xsl:with-param name="replace" select="Feature="/> 
     <xsl:with-param name="by" select="TESTING"/> 
    </xsl:call-template> 
    </td> 
</xsl:otherwise> 
+3

select = " 'TESTING'"과 같이 에 작은 따옴표가 필요합니다. –

9

바꾸기는 XSLT 1.0에서 유효하지 않습니다. 당신은 "translate()"를 사용할 수 있습니다. replace()는 XSLT 2이며 MS .NET XML 코드베이스의 일부가 아닙니다. 당신은 몇몇 써드 파티 XML 라이브러리를 가지고 그것을 얻을 수있다.

+1

정확히 내 프로젝트를 위해 무엇을 찾고 있었습니까. 감사! –

+0

완벽하고 고마워요. D – codemania23

-1

를 지금까지 내가 아는 한, replace()는 XLST 2.0을 소개했다. 문서의 버전 정의 란 무엇입니까? XLST 2.0을 사용하도록 VS 2008을 설정할 수도 있습니다 (가능한 경우).

0

이 기능을 배치해야 = 따옴표 사이의 문자열 (XSLT 1.0에서 사용 가능) 번역 기능이 나를 위해 잘 작동 간단한 문자열 교체를 위해

<xsl:otherwise><td style="border: solid 1px black; background-color:#00CC66;"> <xsl:variable name="FeatureInfo" select="Text" /> <xsl:call-template name="string-replace-all">  <xsl:with-param name="text" select="$FeatureInfo"/>  <xsl:with-param name="replace" select="'Feature='"/>  <xsl:with-param name="by" select="TESTING"/> </xsl:call-template> </td></xsl:otherwise> 

Thanks 
4

을 다음과 같이.

숫자 값의 공백을 제거하는 데 사용했습니다.

+0

번역 기능은 단일 문자에서만 작동합니다. – JLRishe

4

대체 할 C# 스크립트를 임베드하는 것은 어떻습니까?

는 스타일 시트의 맨 아래에 다음을 추가

<msxsl:script language="C#" implements-prefix="scr"> <![CDATA[ public string Replace(string stringToModify, string pattern, string replacement) { return stringToModify.Replace(pattern, replacement); } ]]> </msxsl:script>

스타일 시트 요소에 네임 스페이스 특성을 추가 :

xmlns:scr="urn:scr.this"

다음과 같이 구현 ....

<xsl:value-of select="scr:Replace(description/text(), 'ABC', '123')"/>