2014-04-24 49 views
1

我有以下XMLXSLT 2.0:替換模式匹配特定標準

<GSP> 
    <RES> 
     <R N="1"> 
      <MT N="NonEnglishAbstract" V="[DE]Deutsch Abstract text[FR]French Abstract text[AB]Not new language"/> 
     </R> 
    </RES> 
</GSP> 

我用下面XSLT格式化輸出如下

XSLT

進一步給出

<xsl:template match="MT[@N='NonEnglishAbstract']"> 
    <xsl:analyze-string select="@V" regex="\[([^\[\]]+)\]([^\[]+)"> 
     <xsl:matching-substring> 
      <p class="{regex-group(1)}"> 
       <xsl:value-of select="regex-group(2)"/> 
      </p> 
     </xsl:matching-substring> 
    </xsl:analyze-string> 
</xsl:template> 

輸出

<p class="DE">Deutsch Abstract text</p> 
<p class="FR">French Abstract text</p> 
<p class="AB">Not new language</p> 

在XSLT正則表達式,例如[DE],[FR],[AB],[CD]等。現在,我想只匹配特定的一些任意模式匹配像[DE],[FR]等,這些我都像

<xsl:variable name="language-code> 
    <xsl:value-of select="'[DE],[FR],[RU]'"/> 
</xsl:variable> 

一個逗號分隔的變量怎麼做才能在這個變化的情況下被使用的正則表達式修改?

修改的輸出應該是

<p class="DE">Deutsch Abstract text</p> 
<p class="FR">French Abstract text[AB]Not new language</p> 

回答

0

我稍微改變的參數值語言代碼來傳遞:

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:fn="http://www.w3.org/2005/xpath-functions" 
    exclude-result-prefixes="xs fn"> 

<xsl:param name="language-codes" as="xs:string*" select="'DE', 'FR', 'RU'"/> 
<xsl:variable name="lang-regex" select="concat('\[(', string-join($language-codes, '|'), ')\]')"/> 

<xsl:output method="html" indent="yes"/> 

<xsl:template match="MT[@N='NonEnglishAbstract']"> 
    <xsl:variable name="matches"> 
    <xsl:analyze-string select="@V" regex="{$lang-regex}"> 
     <xsl:matching-substring> 
      <p class="{regex-group(1)}"/> 
     </xsl:matching-substring> 
     <xsl:non-matching-substring> 
      <value><xsl:value-of select="."/></value> 
     </xsl:non-matching-substring> 
    </xsl:analyze-string> 
    </xsl:variable> 
    <xsl:for-each select="$matches/p"> 
    <p class="{@class}"> 
     <xsl:value-of select="following-sibling::value[1]"/> 
    </p> 
    </xsl:for-each> 
</xsl:template> 

</xsl:stylesheet> 
+0

非常感謝!它運作良好。 – itsbalur