2012-09-19 60 views
2

我的XSL變量:xsl:如何翻譯或替換字符串?

<xsl:variable name="string">Satur - Sun - Mon - Tues - Wednes - Thurs - Fri</xsl:variable> 

我需要翻譯或更換string可變數據:

Satur - Sun - Mon - Tues - Wednes - Thurs - Fri 

因此,輸出應該是這樣的:

Saturday - Sunday - Monday - Tuesday - Wednesday - Thursday - Friday 

................................

@Mads漢森
我在xslxml新手,我想你的代碼,但它不工作
100%這是錯誤的

我的XSL文件:

<xsl:variable name="string">Satur - Sun - Mon - Tues - Wednes - Thurs - Fri</xsl:variable> 
    <xsl:template match="/"> 
     <html> 
      <body> 
       <h2>result: </h2> 
       <xsl:value-of 
        select="for $token in tokenize($string, '\s-\s') 
          return(
           document('')/*/config/replacement[find[.=$token]]/replace,    
           $token 
          )[1]" 
        separator=" - " 
       /> 
      </body> 
     </html> 
    </xsl:template> 

</xsl:stylesheet> 

我的xml文件:

<?xml version="1.0" encoding="ISO-8859-1"?> 
<?xml-stylesheet type="text/xsl" href="index.xsl"?> 
    <config> 
     <replacement> 
      <find>Satur</find> 
      <replace>Saturday</replace> 
     </replacement> 
     <replacement> 
      <find>Sun</find> 
      <replace>Sunday</replace> 
     </replacement> 
     <replacement> 
      <find>Mon</find> 
      <replace>Monday</replace> 
     </replacement> 
     <replacement> 
      <find>Tues</find> 
      <replace>Tuesday</replace> 
     </replacement> 
     <replacement> 
      <find>Wednes</find> 
      <replace>Wednesday</replace> 
     </replacement> 
     <replacement> 
      <find>Thurs</find> 
      <replace>Thursday</replace> 
     </replacement> 
     <replacement> 
      <find>Fri</find> 
      <replace>Friday</replace> 
     </replacement> 
    </config> 

我的代碼有什麼問題?

+0

你提到這是行不通的,但並沒有告訴我們它的做法與您的期望不符。它是否給出錯誤? – LarsH

+0

如果您試圖通過在瀏覽器中加載XML來執行轉換,則它不起作用。瀏覽器不支持XSLT 2.0 –

+0

由於您已將配置元素從XSLT中移出並移動到源XML中,您。需要調整XPath以刪除「文檔('')/ *」。 –

回答

2

的XSLT 2.0解決方案:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    version="2.0" 
    xmlns:my="http://stackoverflow.com/questions/12502665/xsl-how-to-translate-or-replace-string"> 
    <xsl:output indent="yes"/> 

    <xsl:variable name="string">Satur - Sun - Mon - Tues - Wednes - Thurs - Fri</xsl:variable> 

    <my:config> 
     <replacement> 
      <find>Satur</find> 
      <replace>Saturday</replace> 
     </replacement> 
     <replacement> 
      <find>Sun</find> 
      <replace>Sunday</replace> 
     </replacement> 
     <replacement> 
      <find>Mon</find> 
      <replace>Monday</replace> 
     </replacement> 
     <replacement> 
      <find>Tues</find> 
      <replace>Tuesday</replace> 
     </replacement> 
     <replacement> 
      <find>Wednes</find> 
      <replace>Wednesday</replace> 
     </replacement> 
     <replacement> 
      <find>Thurs</find> 
      <replace>Thursday</replace> 
     </replacement> 
     <replacement> 
      <find>Fri</find> 
      <replace>Friday</replace> 
     </replacement> 
    </my:config> 

    <xsl:template match="/"> 
     <xsl:value-of 
       select="for $token in tokenize($string, '\s-\s') 
         return 
         (
          document('')/*/my:config/replacement[find[.=$token]]/replace,    
          $token 
         )[1]" 
       separator=" - " /> 
    </xsl:template> 

</xsl:stylesheet> 
+0

我是'xsl'和'xml'的新手,我試過你的代碼,但它不起作用 '100%'這是錯誤的 **我會把我的代碼放在這裏** **我的xsl文件:** –

+0

現在檢查我的問題 –

2

上@Mads'回答一個變種:

<xsl:template match="/"> 
    <xsl:value-of 
    select="for $token in tokenize($string, '\s-\s') 
     return concat($token, 'day')" 
    separator=" - " /> 
</xsl:template> 

然後,你可以省略<my:config>

+0

謝謝..但我是新手。那麼,最終的代碼是什麼? –

+0

@ al-dr:將Mads的模板替換爲上面的模板,刪除整個「」塊,並保留其他所有內容。但是,如果您需要法語或多種語言的日子,那麼請使用Mads的解決方案,而不是此類解決方案。 – LarsH

3

I.的XPath 2.0(XSLT 2.0)溶液

使用以下XPath 2.0單行

concat(replace(.,'\s+-\s*', 'day - '), 'day') 

XSLT - 基於驗證

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

<xsl:template match="/*"> 
    <xsl:sequence select="concat(replace(.,'\s+-\s*', 'day - '), 'day')"/> 
</xsl:template> 
</xsl:stylesheet> 

當這個tran sformation施加在下面的XML文檔:

<t>Satur - Sun - Mon - Tues - Wednes - Thurs - Fri</t> 

有用,正確的結果產生

Saturday - Sunday - Monday - Tuesday - Wednesday - Thursday - Friday 

II。 XSLT 1。0解決方案:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="text"/> 

<xsl:template match="/*"> 
     <xsl:call-template name="replace"> 
     <xsl:with-param name="pS" select= 
     "concat(normalize-space(translate(., '-', ' ')), 'day')"/> 
    </xsl:call-template> 
</xsl:template> 

<xsl:template name="replace"> 
    <xsl:param name="pS"/> 
    <xsl:param name="pTarget" select="' '"/> 
    <xsl:param name="pReplacement" select="'day - '"/> 

    <xsl:if test="$pS"> 
    <xsl:value-of select="substring-before(concat($pS,$pTarget), $pTarget)"/> 
    <xsl:if test="contains($pS, $pTarget)"> 
    <xsl:value-of select="$pReplacement"/> 
    </xsl:if> 
    <xsl:call-template name="replace"> 
    <xsl:with-param name="pS" select="substring-after($pS, $pTarget)"/> 
    <xsl:with-param name="pTarget" select="$pTarget"/> 
    <xsl:with-param name="pReplacement" select="$pReplacement"/> 
    </xsl:call-template> 
    </xsl:if> 
</xsl:template> 
</xsl:stylesheet> 

當這種轉變是在同一個XML文檔(以上)應用,同樣的希望,正確的結果產生

Saturday - Sunday - Monday - Tuesday - Wednesday - Thursday - Friday 
+0

它的工作原理.. 可是,你只加了'天word'到'更換結束word' 使'Satur'是'Saturday' 但是,**怎麼樣法語天???? ** 感謝您的代碼和您的幫助,但它不是我需要的解決方案.. ** + 1 ** –

+1

@ al-dr,這是對您的問題的完整和正確的答案 - 它的方式以當前形式定義。請更新問題,或者更好的問一個新問題。人們不應該猜測你沒有指定的東西。 –

+0

是的,我很抱歉..現在檢查我的問題 –