2009-12-09 64 views
0

我在遇到的XSL文件中遇到以下代碼片段。 XSL基本上是將HTML標籤和國際內容(主要是帶有重音的字符)轉換爲可由QuarkXPress消化的格式。如何縮短這個XSL塊?

我不熟悉XSL在所有和它看起來我們正在檢查對正則表達式的一些內容,轉換它,如果它匹配的代碼判斷,如果不是我們傳遞它一起,看看下一個模板可以匹配它。

的方法看起來OK我外行人看來,但XSL文件已滿重複。

必須有更清晰的寫作方式。你能幫我嗎?

編輯:解釋重複。

在下面的塊,我有兩個街區幾乎相同,大約有50多個,這些塊的文件中。塊之間唯一改變的事情是:模板名稱,正則表達式,匹配子字符串標記的內容以及在非匹配子字符串塊中調用的內容。

<!-- convert HTML <br> tag to ASCII/Quark new line tag --> 
    <xsl:template name="break-tag"> 
     <xsl:param name="string" select="string(.)"/> 
     <xsl:analyze-string select="$string" regex="&lt;br&gt;" flags="i"> 
      <xsl:matching-substring> 
       <xsl:text disable-output-escaping="yes">&lt;\n&gt;</xsl:text> 
      </xsl:matching-substring> 
      <xsl:non-matching-substring> 
       <xsl:call-template name="open-list-tag"/> 
      </xsl:non-matching-substring> 
     </xsl:analyze-string> 
    </xsl:template> 

<!-- convert HTML <li> tag to Bull Text stylesheet with bullet tag and tab tag --> 
    <xsl:template name="open-list-tag"> 
     <xsl:param name="string" select="string(.)"/> 
     <xsl:analyze-string select="$string" regex="&lt;li&gt;" flags="i"> 
      <xsl:matching-substring> 
       <xsl:text disable-output-escaping="yes">@F07/2 Bullet Points:</xsl:text> 
      </xsl:matching-substring> 
      <xsl:non-matching-substring> 
       <xsl:call-template name="euro-char-entity"/> 
      </xsl:non-matching-substring> 
     </xsl:analyze-string> 
    </xsl:template> 
+1

我沒有看到重複。請指出。 – BalusC 2009-12-09 17:50:57

回答

4

XSL是用於XML的腳本語言,寫成XML。因爲它是XML,所有指令都是XML標籤,同樣所有打開的XML標籤都需要關閉XML標籤。

對於XSL,這個片段其實非常簡潔。

你的代碼所做的總結是正確的。 XSL是很容易學,但我會澄清一些標籤爲您

<xsl:template name="break-tag"> 
... 
</xsl:template> 

一個xsl:模板大致相當於一個功能

<xsl:param name="string" select="string(.)"/> 

這是一個輸入參數模板/功能。字符串()是當前的範圍時,該模板被稱爲

<xsl:analyze-string select="$string" regex="&lt;br&gt;" flags="i"> 
    <xsl:matching-substring> 
     <xsl:text disable-output-escaping="yes">&lt;\n&gt;</xsl:text> 
    </xsl:matching-substring> 
    <xsl:non-matching-substring> 
     <xsl:call-template name="open-list-tag"/> 
    </xsl:non-matching-substring> 
</xsl:analyze-string> 

此字符串對正則表達式進行比較的文本。如果匹配,則將「< \ n >」寫入輸出。如果沒有匹配,則調用另一個模板(open-list-tag)。


編輯 - 在複製

XSL具有開關/指令的情況下,以及擴展的正則表達式的功能。您可能可以修改此操作以執行所需操作:

<xsl:choose> 
    <xsl:when test="matches(string(.),'&lt;br&gt;')"> 
    <xsl:text disable-output-escaping="yes">&lt;\n&gt;</xsl:text> 
    </xsl:when> 
    <xsl:when test="matches(string(.),'&lt;li&gt;')"> 
    <xsl:text disable-output-escaping="yes">@F07/2 Bullet Points:</xsl:text> 
    </xsl:when> 
    <xsl:otherwise> 
    <xsl:text>Unkown Tag: <xsl:value-of select="string(.)"/></xsl:text> 
    </xsl:otherwise> 
</xsl:choose>