2012-11-07 50 views
0

我想編寫一個樣式表,其中突出顯示文本中的關鍵字。使用xslt在文本中查找關鍵字

<?xml version="1.0" encoding="ISO-8859-1"?> 
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="html"/> 
    <xsl:template match="/"> 
     <xsl:param name="keyword">keyword</xsl:param> 
     <html> 
      <body> 
       <xsl:for-each select="element()"> 
       <xsl:variable name="elValue" select="."/> 
        <xsl:analyze-string select="upper-case(.)" regex="{upper-case($keyword)}*"> 
         <xsl:matching-substring> 
          <i> 
           <xsl:value-of select="."/> 
          </i> 
         </xsl:matching-substring> 
         <xsl:non-matching-substring> 
          <xsl:value-of select="."/> 
         </xsl:non-matching-substring> 
        </xsl:analyze-string> 
       </xsl:for-each> 
      </body> 
     </html> 
    </xsl:template> 
</xsl:stylesheet> 

我已經使用了正則表達式。

我的問題:整個html輸出現在是大寫。我試圖使用變量elValue來保存原始值,但這不起作用。該變量似乎在每個循環中附加新值(並且不僅包含新值)。

有沒有辦法輸出原始格式的元素(無大寫)?

由於提前,

+0

使用i標誌考慮後你想用XSLT來創建一個最小的,但完整的XML輸入樣本和HTML結果對於該示例,我們可以展示正確的XSLT方法。到目前爲止,您只展示了一些XSLT,它不會執行您想要的任何操作,而不會讓我們看到您針對其執行的輸入。 –

回答

1

你可能只是想在http://www.w3.org/TR/xslt20/#analyze-string

   <xsl:analyze-string select="." regex="{$keyword}*" flags="i"> 
        <xsl:matching-substring> 
         <i> 
          <xsl:value-of select="."/> 
         </i> 
        </xsl:matching-substring> 
        <xsl:non-matching-substring> 
         <xsl:value-of select="."/> 
        </xsl:non-matching-substring> 
       </xsl:analyze-string> 
+1

正確的做法 - 儘管我不知道「*」應該在正則表達式屬性中做什麼。 –

+0

星號字符在原始代碼中,我也沒有完全理解,因此我只是編輯了大寫字母,並保留了其他所有內容。 –

+0

謝謝 - 「*」只是一個輸入錯誤 – user1800825