以文本方式查看主题

-  中文XML论坛 - 专业的XML技术讨论区  (http://bbs.xml.org.cn/index.asp)
--  『 XSL/XSLT/XSL-FO/CSS 』  (http://bbs.xml.org.cn/list.asp?boardid=8)
----  请教一个很奇怪问题  (http://bbs.xml.org.cn/dispbbs.asp?boardid=8&rootid=&id=40856)


--  作者:tangyin
--  发布时间:12/4/2006 11:09:00 PM

--  请教一个很奇怪问题
两个xml,我想让他们显示的时候奇数行背景为灰色。方法是在<tr>后面加上下面这句话:
<xsl:if test="position() mod 2 != 0"><xsl:attribute name="bgcolor">gray</xsl:attribute></xsl:if>   
结果下面1,2文件显示正常,3,4则出错,提示方法未知(ie浏览器)。
"-->position()<-- mod 2 != 0 请教一下是什么原因。"

1. 显示有问题的 grade.xml  
<?xml version="1.0" encoding="utf-8"?>
<?xml:stylesheet type="text/xsl" href="grade.2.xsl"?>
<document>
<grade>
<name>大胖</name><english>80</english>
<math>90</math><chymest>90</chymest>
</grade>
<grade>
<name>小花</name><english>98</english>
<math>55</math><chymest>85</chymest>
</grade>

<grade>
<name>小A</name><english>18</english>
<math>70</math><chymest>85</chymest>
</grade>

<grade>
<name>小胖</name><english>80</english>
<math>30</math><chymest>90</chymest>
</grade>

</document>

2. 相应的xsl文件grade2.xsl    
<?xml version="1.0" encoding="utf-8" ?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl">
<xsl:template match="/">
<HTML>
<HEAD><TITLE>成绩单</TITLE></HEAD>
<BODY><xsl:apply-templates select="document"/></BODY>
</HTML>
</xsl:template>

<xsl:template match="document">
<TABLE border="1" cellspacing="0">
<TH>姓名</TH> <TH>英语</TH><TH>数学</TH><TH>化学</TH>
<xsl:for-each select="grade">
<TR>
<xsl:if test="position() mod 2 != 0"><xsl:attribute name="bgcolor">gray</xsl:attribute></xsl:if><TD><xsl:value-of select="name"/></TD>
<TD><xsl:apply-templates select="english"/></TD>
<TD><xsl:apply-templates select="math"/></TD>
<TD><xsl:apply-templates select="chymest"/></TD>
</TR>
</xsl:for-each>
</TABLE>
</xsl:template>


<xsl:template match="name"></xsl:template>

<xsl:template match="english|math|chymest">
<xsl:choose>
 <xsl:when test=".[value() $gt$ 85]"><xsl:attribute name="style">color:blue</xsl:attribute><xsl:value-of /></xsl:when>
 <xsl:when test=".[value() $gt$ 70]"><xsl:attribute name="style">color:green</xsl:attribute><xsl:value-of /></xsl:when>
 <xsl:when test=".[value() $gt$ 60]"><xsl:attribute name="style">color:yellow</xsl:attribute><xsl:value-of /></xsl:when>
 <xsl:otherwise><xsl:attribute name="style">color:red</xsl:attribute>不及格</xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>


3.显示正常的xml : cd_catalog.xml
<?xml version="1.0" encoding="ISO-8859-1"?>
<!-- Edited with XML Spy v4.2 -->
<?xml-stylesheet type="text/xsl" href="cd_catalog.xsl"?>
<CATALOG>
 <CD>
  <TITLE>Empire Burlesque</TITLE>
  <ARTIST>Bob Dylan</ARTIST>
  <COUNTRY>USA</COUNTRY>
  <COMPANY>Columbia</COMPANY>
  <PRICE>10.90</PRICE>
  <YEAR>1985</YEAR>
 </CD>
 <CD>
  <TITLE>Hide your heart</TITLE>
  <ARTIST>Bonnie Tyler</ARTIST>
  <COUNTRY>UK</COUNTRY>
  <COMPANY>CBS Records</COMPANY>
  <PRICE>9.90</PRICE>
  <YEAR>1988</YEAR>
 </CD>
 <CD>
  <TITLE>Greatest Hits</TITLE>
  <ARTIST>Dolly Parton</ARTIST>
  <COUNTRY>USA</COUNTRY>
  <COMPANY>RCA</COMPANY>
  <PRICE>9.90</PRICE>
  <YEAR>1982</YEAR>
 </CD>
 <CD>
  <TITLE>Still got the blues</TITLE>
  <ARTIST>Gary Moore</ARTIST>
  <COUNTRY>UK</COUNTRY>
  <COMPANY>Virgin records</COMPANY>
  <PRICE>10.20</PRICE>
  <YEAR>1990</YEAR>
 </CD>
 <CD>
  <TITLE>Eros</TITLE>
  <ARTIST>Eros Ramazzotti</ARTIST>
  <COUNTRY>EU</COUNTRY>
  <COMPANY>BMG</COMPANY>
  <PRICE>9.90</PRICE>
  <YEAR>1997</YEAR>
 </CD>
 <CD>
  <TITLE>One night only</TITLE>
  <ARTIST>Bee Gees</ARTIST>
  <COUNTRY>UK</COUNTRY>
  <COMPANY>Polydor</COMPANY>
  <PRICE>10.90</PRICE>
  <YEAR>1998</YEAR>
 </CD>
 <CD>
  <TITLE>Sylvias Mother</TITLE>
  <ARTIST>Dr.Hook</ARTIST>
  <COUNTRY>UK</COUNTRY>
  <COMPANY>CBS</COMPANY>
  <PRICE>8.10</PRICE>
  <YEAR>1973</YEAR>
 </CD>
 <CD>
  <TITLE>Maggie May</TITLE>
  <ARTIST>Rod Stewart</ARTIST>
  <COUNTRY>UK</COUNTRY>
  <COMPANY>Pickwick</COMPANY>
  <PRICE>8.50</PRICE>
  <YEAR>1990</YEAR>
 </CD>
 <CD>
  <TITLE>Romanza</TITLE>
  <ARTIST>Andrea Bocelli</ARTIST>
  <COUNTRY>EU</COUNTRY>
  <COMPANY>Polydor</COMPANY>
  <PRICE>10.80</PRICE>
  <YEAR>1996</YEAR>
 </CD>
 <CD>
  <TITLE>When a man loves a woman</TITLE>
  <ARTIST>Percy Sledge</ARTIST>
  <COUNTRY>USA</COUNTRY>
  <COMPANY>Atlantic</COMPANY>
  <PRICE>8.70</PRICE>
  <YEAR>1987</YEAR>
 </CD>
 <CD>
  <TITLE>Black angel</TITLE>
  <ARTIST>Savage Rose</ARTIST>
  <COUNTRY>EU</COUNTRY>
  <COMPANY>Mega</COMPANY>
  <PRICE>10.90</PRICE>
  <YEAR>1995</YEAR>
 </CD>
 <CD>
  <TITLE>1999 Grammy Nominees</TITLE>
  <ARTIST>Many</ARTIST>
  <COUNTRY>USA</COUNTRY>
  <COMPANY>Grammy</COMPANY>
  <PRICE>10.20</PRICE>
  <YEAR>1999</YEAR>
 </CD>
 <CD>
  <TITLE>For the good times</TITLE>
  <ARTIST>Kenny Rogers</ARTIST>
  <COUNTRY>UK</COUNTRY>
  <COMPANY>Mucik Master</COMPANY>
  <PRICE>8.70</PRICE>
  <YEAR>1995</YEAR>
 </CD>
 <CD>
  <TITLE>Big Willie style</TITLE>
  <ARTIST>Will Smith</ARTIST>
  <COUNTRY>USA</COUNTRY>
  <COMPANY>Columbia</COMPANY>
  <PRICE>9.90</PRICE>
  <YEAR>1997</YEAR>
 </CD>
 <CD>
  <TITLE>Tupelo Honey</TITLE>
  <ARTIST>Van Morrison</ARTIST>
  <COUNTRY>UK</COUNTRY>
  <COMPANY>Polydor</COMPANY>
  <PRICE>8.20</PRICE>
  <YEAR>1971</YEAR>
 </CD>
 <CD>
  <TITLE>Soulsville</TITLE>
  <ARTIST>Jorn Hoel</ARTIST>
  <COUNTRY>Norway</COUNTRY>
  <COMPANY>WEA</COMPANY>
  <PRICE>7.90</PRICE>
  <YEAR>1996</YEAR>
 </CD>
 <CD>
  <TITLE>The very best of</TITLE>
  <ARTIST>Cat Stevens</ARTIST>
  <COUNTRY>UK</COUNTRY>
  <COMPANY>Island</COMPANY>
  <PRICE>8.90</PRICE>
  <YEAR>1990</YEAR>
 </CD>
 <CD>
  <TITLE>Stop</TITLE>
  <ARTIST>Sam Brown</ARTIST>
  <COUNTRY>UK</COUNTRY>
  <COMPANY>A and M</COMPANY>
  <PRICE>8.90</PRICE>
  <YEAR>1988</YEAR>
 </CD>
 <CD>
  <TITLE>Bridge of Spies</TITLE>
  <ARTIST>T`Pau</ARTIST>
  <COUNTRY>UK</COUNTRY>
  <COMPANY>Siren</COMPANY>
  <PRICE>7.90</PRICE>
  <YEAR>1987</YEAR>
 </CD>
 <CD>
  <TITLE>Private Dancer</TITLE>
  <ARTIST>Tina Turner</ARTIST>
  <COUNTRY>UK</COUNTRY>
  <COMPANY>Capitol</COMPANY>
  <PRICE>8.90</PRICE>
  <YEAR>1983</YEAR>
 </CD>
 <CD>
  <TITLE>Midt om natten</TITLE>
  <ARTIST>Kim Larsen</ARTIST>
  <COUNTRY>EU</COUNTRY>
  <COMPANY>Medley</COMPANY>
  <PRICE>7.80</PRICE>
  <YEAR>1983</YEAR>
 </CD>
 <CD>
  <TITLE>Pavarotti Gala Concert</TITLE>
  <ARTIST>Luciano Pavarotti</ARTIST>
  <COUNTRY>UK</COUNTRY>
  <COMPANY>DECCA</COMPANY>
  <PRICE>9.90</PRICE>
  <YEAR>1991</YEAR>
 </CD>
 <CD>
  <TITLE>The dock of the bay</TITLE>
  <ARTIST>Otis Redding</ARTIST>
  <COUNTRY>USA</COUNTRY>
  <COMPANY>Atlantic</COMPANY>
  <PRICE>7.90</PRICE>
  <YEAR>1987</YEAR>
 </CD>
 <CD>
  <TITLE>Picture book</TITLE>
  <ARTIST>Simply Red</ARTIST>
  <COUNTRY>EU</COUNTRY>
  <COMPANY>Elektra</COMPANY>
  <PRICE>7.20</PRICE>
  <YEAR>1985</YEAR>
 </CD>
 <CD>
  <TITLE>Red</TITLE>
  <ARTIST>The Communards</ARTIST>
  <COUNTRY>UK</COUNTRY>
  <COMPANY>London</COMPANY>
  <PRICE>7.80</PRICE>
  <YEAR>1987</YEAR>
 </CD>
 <CD>
  <TITLE>Unchain my heart</TITLE>
  <ARTIST>Joe Cocker</ARTIST>
  <COUNTRY>USA</COUNTRY>
  <COMPANY>EMI</COMPANY>
  <PRICE>8.20</PRICE>
  <YEAR>1987</YEAR>
 </CD>
</CATALOG>
4. cd_catalog.xml相应的xsl:  cd_catalog.xsl
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format"

xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:fn="http://www.w3.org/2005/xpath-functions">
<xsl:template match="/">
<html>
 <head>
  <title>CD目录</title>
 </head>
 <body>
 <h3>CD Catalog</h3><hr/>
<table border="1" cellspacing="0" >
 <tbody>
  <tr>
   <th>Title</th>
   <th>Artist</th>
   <th>COUNTRY</th>
   <th>COMPANY</th>
   <th>PRICE</th>
   <th>YEAR</th>
  </tr>
  <xsl:for-each select="CATALOG/CD[YEAR>1986]"> <!--注意:大小写敏感!-->
  <tr>
   <xsl:if test="position() mod 2 != 0"><xsl:attribute name="bgcolor">gray</xsl:attribute></xsl:if>
   <td><xsl:value-of select="TITLE"/> </td>
   <td><xsl:value-of select="ARTIST"/></td>
   <td><xsl:value-of select="COUNTRY"/></td>
   <td><xsl:value-of select="COMPANY"/></td>
   <td><xsl:value-of select="PRICE"/></td>
   <td><xsl:value-of select="YEAR"/></td>
  </tr>
  </xsl:for-each>
  
 </tbody>
</table>
 </body>
</html>
</xsl:template>
</xsl:stylesheet>


--  作者:Qr
--  发布时间:12/5/2006 12:58:00 PM

--  
position() 改 index(),你的命名空间还是草案版的,没有postion()这个用法
--  作者:tangyin
--  发布时间:12/5/2006 7:48:00 PM

--  
谢谢,我改index(),似乎两个都出错了,会不会是编码问题呢。一个是:“预期的句柄 'eof' 找到 'NAME'。 index() -->mod<-- 2 != 0”
还有一个是乱码:
ॕl>f:y XML u?0 O(u XSL 7h_h?ॕl始w XML ??eQ0 ?ck?qTUS? 7R?e c?? ?NT͑Ջ0
--------------------------------------------------------------------------------
'index' N/fN*N gHe?v XSLT b XPath ? -->index()<-- mod 2 != 0

--  作者:tangyin
--  发布时间:12/5/2006 8:01:00 PM

--  
问题解决了,原来用了
<xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl">
一直没注意。

不如彻底点,高手能否说说几个版本的区别?


--  作者:hexun831012
--  发布时间:12/8/2006 1:07:00 PM

--  
两个版本的xsl大不一样,结构,元素,语法,函数,xpath表达式区别很大
www.w3.org对比一下吧
--  作者:seky
--  发布时间:12/29/2006 12:13:00 PM

--  
搂主,<xsl:when test=".[value() $gt$ 85]">这句能够通过吗?我怎么报错呀?错误 1 缩写步骤“.”不能跟谓词。应使用完整格式的“self::node()[predicate]”。  . -->[<-- value() $gt$ 60],这个是什么错误呀?
--  作者:Qr
--  发布时间:12/29/2006 3:17:00 PM

--  
$gt$ 是草案的东东,表示大于号,标准里已经取消,改用 &gt;


--  作者:wangmf
--  发布时间:12/29/2006 5:52:00 PM

--  
<xsl:template match="name"></xsl:template>

<xsl:template match="english|math|chymest">
<xsl:variable name="val" select="."></xsl:variable>
<xsl:choose>
<xsl:when test="$val &gt; 85"><xsl:attribute name="style">color:blue</xsl:attribute><xsl:value-of select="."/></xsl:when>
<xsl:when test="$val &gt; 70"><xsl:attribute name="style">color:green</xsl:attribute><xsl:value-of select="."/></xsl:when>
<xsl:when test="$val &gt; 60"><xsl:attribute name="style">color:yellow</xsl:attribute><xsl:value-of select="."/></xsl:when>
<xsl:otherwise><xsl:attribute name="style">color:red</xsl:attribute>不及格</xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>


W 3 C h i n a ( since 2003 ) 旗 下 站 点
苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
93.750ms