xml
  • xslt
  • apostrophe
  • 2014-01-22 84 views 1 likes 
    1

    我在我的XML得到了以下內容:XSLT 1.0無法翻譯撇

    <MyElement> Cats&amp;apos; eyes </ MyElement > 
    

    當我在XSLT 1.0使用下面的代碼:

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

    輸出是

    Cats&apos; eyes 
    

    但我想

    Cats’ eyes 
    

    我試圖

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

    但它沒有工作,其結果是CA」安永一些消除人物!!!!

    有沒有想法?

    謝謝

    回答

    2

    你的第一個問題是它看起來你的內容已被「雙重逃脫」。撇號的實體是&apos;,而不是&amp;apos;

    您試圖用translate()替換字符沒有奏效,因爲它的工作方式與您的期望不同。這不是一個查找/替換方法。您可以在第二個參數中指定一個字符列表,然後在第三個參數中指定相應的字符以將每個字符轉換爲。如果第三個參數中的字符列表中沒有相應的字符,那麼它將被刪除。

    您將需要使用recursive template來執行字符替換。

    例如:

    <?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> 
    

    當然,使用XSLT 2.0,你可以只使用replace()功能:

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

    很簡單,只需要添加disable-output-escaping="yes"

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

    又有哪些呢你得到? –

    +0

    aw,匆匆做完。我只是複製並粘貼他的例子,我仍然得到輸入的文本節點(而不是他聲稱的輸出)。對不起。順便說一下, –

    +0

    ,實際的字符是一個撇號還是一個正確的單引號? –

    相關問題