2009-09-23 88 views
1

了xsl上的xslt在顯示之前對元素值進行操作?

http://www.w3schools.com/xsl/tryxslt.asp?xmlfile=cdcatalog&xsltfile=cdcatalog

右手邊的默認行爲是與在左側XML中的每個CD的標題和藝術家,以顯示2列的表格。 (這通過底部的「Your Result」底部的默認輸出顯示。)

我想修改xsl以瞭解如何將xsl函數應用於從XML元素返回的文本。 (這是一個whole list of xsl string functions。)例如,有一個函數fn:大寫(字符串),將字符串轉換爲大寫。

那麼,對於xsl所示的最小修改是there,除非CD標題全部大寫,否則會產生相同的表格?

回答

2

由於該網頁上的XSL是version="1.0",您可以在此行

<td><xsl:value-of select="title"/></td> 
          ^^^^^ 

改成這樣:

<td><xsl:value-of select="translate(title, 'abcdefghijklnmopqrstuvwxyz', 'ABCDEFGHIJKLNMOPQRSTUVWXYZ')"/></td> 
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 

雖然有支持XPath 2.0的處理器,您應該可以使用此代替:

<td><xsl:value-of select="upper-case(title)"/></td> 
          ^^^^^^^^^^^^^^^^^ 
+0

非常感謝XPath和XSLT版本1.0和2.0的討論(以便了解這些版本的存在)。但是我已經接受了這個最簡單的答案,因爲(a)對於我問的問題和(b)它在我給出的頁面上工作的問題似乎是正確的答案。但是要感謝所有響應者! – talkaboutquality 2009-09-25 09:22:30

+0

此外,這個答案讓我非常清楚我如何將一個函數調用插入元素名稱的select語句中。也就是說,從片段開始 select =「title」 它在我不清楚的地方放在函數名和括號裏。現在很清楚。 – talkaboutquality 2009-09-25 09:24:37

+0

我想我不能編輯以前的評論?因此,更新我的第一條評論,我發現這個答案也簡要地解決了2.0版。這個答案簡短,正確。這就是我接受它的原因。 – talkaboutquality 2009-09-25 09:25:44

3

更新:僅適用於支持XPath 2.0的處理器。

我認爲以下應該做你想做的事......不要忘記聲明fn命名空間(xmlns:fn = ...)或者根本不聲明任何命名空間。

<?xml version="1.0" encoding="ISO-8859-1"?> 
<!-- Edited by XMLSpy® --> 
<xsl:stylesheet version="1.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:fn="http://www.w3.org/2005/xpath-functions"> 

<xsl:template match="/"> 
    <html> 
    <body> 
    <h2>My CD Collection</h2> 
    <table border="1"> 
     <tr bgcolor="#9acd32"> 
     <th>Title</th> 
     <th>Artist</th> 
     </tr> 
     <xsl:for-each select="catalog/cd"> 
     <tr> 
     <td><xsl:value-of select="fn:upper-case(title)"/></td> 
     <td><xsl:value-of select="artist"/></td> 
     </tr> 
     </xsl:for-each> 
    </table> 
    </body> 
    </html> 
</xsl:template> 
</xsl:stylesheet> 
+0

在XPath 1.0中沒有'大寫'(因此在XSLT 1.0中)。 – 2009-09-23 21:17:46

+0

讓我來檢查一下,這個樣式表在Saxon-B 9.1.0.6 – Brabster 2009-09-23 21:20:06

+0

下工作正常,Pavel當然是正確的。這些功能在XPath 2.0中可用,所以我懷疑不在w3schools站點上。如果您使用符合XPath 2.0的處理器,則可以像上面那樣使用它們。否則,你需要建立一個函數來自己做。 – Brabster 2009-09-23 21:23:28

0

您給出的函數列表的鏈接是XPath 2.0,XSLT 2.0和XQuery 1.0。您鏈接到的樣式表是XSLT 1.0,它不支持大多數這些功能。特別是,它不支持upper-case()

4

upper-case是一個XSLT 2.0函數。如果你碰巧有一個2.0樣式表(該例子並不)和發動機進行改造它,然後用它是非常簡單:

<xsl:value-of select="upper-case(title)"/> 

然而,可悲的是還較爲常見的1.0你最好的計劃是使用之一:

  • 自定義擴展(平臺不同)
  • 繁瑣的XSLT轉換功能translate(title,'abcdefghijklmnopqrstuvwxyz','ABCDEFGHIJKLMNOPQRSTUVWXYZ')這是原油和問題與國際化
  • CSS的簡單text-transform:uppercase;(通常是最好的,因爲這種解決方案通常是一個風格問題,而不是數據問題)
+0

什麼是對原始頁面XSL代碼應用此「CSS的簡單文本轉換:大寫;」的最小改變是什麼?解? – talkaboutquality 2009-09-25 09:26:43

+0

@downvoter - wth? – annakata 2009-09-30 21:40:35

相關問題