2009-09-23 41 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

相关问题