2012-12-20 4 views
0

HTML 페이지로 변환 할 텍스트 블록을 구문 분석하기 위해이 XSLT 템플릿을 아래에 만들었습니다. 이 템플릿은 여러 위치에서 사용되지만 항상 지정한 문자를 성공적으로 변환하지 못합니다. 예를 들면 다음과 같습니다 :모든 문자를 바꿀 수없는 재귀 xslt 템플릿

"도움"을 원하면 "계속"4 가지를 계속 찾고 싶지만 "공허"라는 것을 알면됩니다.

결과는 다음과 같습니다."두 가지"가 "도움이"필요하고 계속해서 "더보기"를 원하지만 찾을 수있는 것은 모두 "공허"입니다.

의견이 있으십니까?

<xsl:template name="PreserveQuotations"> 
    <xsl:param name="text"/> 
    <xsl:choose> 
    <xsl:when test="contains($text,'&#8220;')"> 
     <xsl:value-of select="substring-before($text,'&#8220;')"/> 
     <xsl:text>"</xsl:text> 
     <xsl:call-template name="PreserveQuotations"> 
     <xsl:with-param name="text"> 
      <xsl:value-of select="substring-after($text,'&#8220;')"/> 
     </xsl:with-param> 
     </xsl:call-template> 
    </xsl:when> 
    <xsl:when test="contains($text,'&#8221;')"> 
     <xsl:value-of select="substring-before($text,'&#8221;')"/> 
     <xsl:text>"</xsl:text> 
     <xsl:call-template name="PreserveQuotations"> 
     <xsl:with-param name="text"> 
      <xsl:value-of select="substring-after($text,'&#8221;')"/> 
     </xsl:with-param> 
     </xsl:call-template> 
    </xsl:when> 
    <xsl:otherwise> 
     <xsl:value-of select="$text"/> 
    </xsl:otherwise> 
    </xsl:choose> 
</xsl:template> 

답변

0

두 개의 분명한 해결책이 있습니다

aaa &#8221; bbb &#8220; ccc 

형식의 문자열의 경우에 대해 생각하면 문제가 당신에게 명확하게해야한다 : 문자열을 포함하는 경우 (1)의 경우 확인 두 특수 문자를 모두 처리 한 다음 첫 번째 문자를 처리합니다. 또는 (2) 각 문자에 대한 문자열을 한 번 통과시킵니다. 템플릿을 두 개의 템플릿으로 분할하거나 매개 변수에서 찾을 문자를 지정하십시오.