2014-01-22 3 views
1

아포스트로피 변환 할 수 없습니다XSLT 1.0 내가 XML에서 다음과 같은 내용을 가지고있다

<xsl:value-of select="MyElement" /> 

이 출력은

Cats&apos; eyes 

는하지만

을 얻으려면 일부 문자를 제거하여, 결과는 '도망 캘리포니아이었다

나는

<xsl:value-of select='translate(MyElement, "&amp;apos; ", "&apos; ")' /> 

을 시도했지만 작동하지 않았다 !!!!

의견이 있으십니까?

감사

답변

2

첫 번째 문제는 콘텐츠가 "이중 탈출"되어 나타나는 것입니다. 아포스트로피 엔터티는 &apos;이 아니고 &amp;apos;입니다.

문자를 translate()으로 바꾸려는 시도가 예상과 다른 방식으로 작동하지 않았습니다. 찾기/바꾸기 메소드가 아닙니다. 두 번째 인수에 문자 목록을 지정하고 세 번째 매개 변수에 각 문자를 번역하려면 해당 문자를 지정합니다. 세 번째 매개 변수의 문자 목록에 해당 문자가 없으면 문자가 제거됩니다.

문자 교체를 수행하려면 recursive template을 사용해야합니다. 그냥 replace() 기능을 사용할 수 있습니다 XSLT 2.0 물론

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> 
    <xsl:template match="/"> 
     <xsl:call-template name="replace-string"> 
      <xsl:with-param name="text" select="MyElement"/> 
      <xsl:with-param name="replace" select="'&amp;apos;'"/> 
      <xsl:with-param name="with" select='"&apos;"'/> 
     </xsl:call-template> 
    </xsl:template> 

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

: : 예를 들어

<xsl:sequence select='replace(MyElement, "&amp;apos;", "&apos;")'/> 
0

그건 간단 해요, 단지 disable-output-escaping="yes"

<xsl:value-of select="MyElement" disable-output-escaping="yes"/> 
+0

를 추가하고 무엇 너? –

+0

아, 급하게 했어. 나는 그의 예제를 복사하여 붙여 넣기 만하고 입력의 텍스트 노드를 얻는다 (그가 주장하는 결과가 아니다). 그 죄송합니다. 그런데 –

+0

실제 문자는 어포 스트로피 또는 오른쪽 작은 따옴표입니까? –