以文本方式查看主题

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


--  作者:epkp
--  发布时间:1/11/2007 5:01:00 PM

--  XSL中script问题

<?xml version="1.0" encoding="gb2312"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" encoding="gb2312" doctype-public="-//W3C//DTD XHTML 1.0

Transitional//EN" doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"/>
<xsl:template match="/">


<html>
<head>
<style>
#content {
 font-size: 14px;
 width: 200px;
 height: 20px;
 background: #eee;
 padding: 10px;
 border: 4px #ccc double;
 overflow: hidden;
}

</style>
</head>
<body>
<xsl:for-each select="GPS/prices/produot">
<xsl:sort select="price" data-type="number"/>
<table>
<tr>
<td width="100">
<div id="content" onmouseover="shoppingcat();" onmouseout="shoppingcata();" >
<xsl:element name="a">
  <xsl:attribute name="href"><xsl:value-of select="href"/></xsl:attribute>
  <xsl:attribute name="title">价格更新日期<xsl:value-of

select="price/@time"/></xsl:attribute>
     <xsl:value-of select="name"/>
  </xsl:element>
</div>
</td>
<td>
<xsl:value-of select="price"/></td>
</tr>
</table>
</xsl:for-each>

<script language="javascript">
var s=5;
var minheight=10;
var maxheight=300;
function shoppingcat()
{
if(content.style.pixelHeight<maxheight) {content.style.pixelHeight+=s;
setTimeout("shoppingcat()",0);}
}
                                
function shoppingcata(){
if(content.style.pixelHeight>minheight) {content.style.pixelHeight-=s;
setTimeout("shoppingcata()",0);}
}
</script>
</body>
</html>


</xsl:template>
</xsl:stylesheet>



这里的script老是出错,能帮帮忙吗?
--  作者:epkp
--  发布时间:1/11/2007 5:08:00 PM

--  
我的EMAIL:epkpcn@163.com
--  作者:sam
--  发布时间:1/11/2007 5:29:00 PM

--  
script中的大于号小于号,改成 &gt; &lt;
--  作者:Qr
--  发布时间:1/12/2007 11:04:00 AM

--  
在XSL中加入script,最好在script代码中使用xsl:comment。即<script><xsl:comment>...</xsl:comment></script>,这样用会避免好多问题:)


[此贴子已经被作者于2007-1-20 9:45:17编辑过]

--  作者:epkp
--  发布时间:1/12/2007 2:36:00 PM

--  
谢谢啊,两位的方法基本解决了SCRIPT插入的问题,
不过运行起来还是要出问题
SAM 的方法:运行时说content.style.pixelHeight为空
QR的方法:运行时说缺少对象
--  作者:Qr
--  发布时间:1/12/2007 4:45:00 PM

--  
这就是你的代码的问题了,在XML+XSL中偶尔和HTML有点区别。
--  作者:epkp
--  发布时间:1/12/2007 5:55:00 PM

--  
哦,好的,知道了,谢谢
--  作者:zhushixingfu
--  发布时间:1/15/2007 5:18:00 PM

--  
我认为你可以这样试试!
<script language="Javascript">
<![CDATA[
                 .
                 .
                 .
]]>
</script>
--  作者:zlgbsltang
--  发布时间:8/26/2008 10:08:00 PM

--  
我的也是啊 谁帮我看看 先谢谢了
<?xml version="1.0" encoding="GB2312"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output method="html" encoding="GB2312"/> 
<xsl:param name="size" select="1"/>

<xsl:template match="idCard">
<html>
<script>
<![CDATA[
   function nextPage(num){
    document.getElementById("content"+num).style.display="";
    num--;
    document.getElementById("content"+num).style.display="none";
   }
   function prevPage(num){
    document.getElementById("content"+num).style.display="";
    num++;
    document.getElementById("content"+num).style.display="none";
   }
   function onInitialize(){
    var i = 1;
    document.getElementById("content"+i).style.display = "";
   }
]]>
</script>
<body onload="onInitialize()">
    <xsl:apply-templates select="person[position() mod $size = 1]">
     <xsl:with-param name="pages" select="ceiling(count(person) div $size)"/>
    </xsl:apply-templates>
   </body>
</html>
</xsl:template>

<xsl:template match="person">
<xsl:param name="pages"/>
<xsl:variable name="page" select="position()"/>
<table id='content{$page}' style="display:'none'" title="content{$page}">
<xsl:for-each select="self::person | following-sibling::person[position()&lt;$size]">
     <table border="1">
        <tr>
            <th>姓名</th>
            <td><xsl:value-of select="name"/></td>
            <xsl:if test="gender='男'">
                <td rowspan="5"><img src="imgs/a.jpg" /></td>
            </xsl:if>
            <xsl:if test="gender='女'">
                <td rowspan="5"><img src="imgs/b.jpg"/></td>
            </xsl:if>  
        </tr>
        <tr>
            <th>性别</th>
            <td><xsl:value-of select="gender"/></td>
        </tr>
        <tr>
        <th>民族</th>
            <td><xsl:value-of select="race"/></td>
        </tr>
        <tr>
            <th>出生</th>
            <td><xsl:value-of select="birthday"/></td>
        </tr>
        <tr>
            <th>住址</th>
            <td><xsl:value-of select="address"/></td>
        </tr>
        <th>公民身份号码</th>
            <td><xsl:value-of select="id"/></td>
        </table>
    </xsl:for-each>
<table id="navBar" border="1">
    <xsl:choose>
     <xsl:when test="$page = 1">
     <tr>
     <td> 第<xsl:value-of select="$page" />页---
     <a href="#{$page + 1}" onclick="nextPage({$page + 1})">下一页</a>---
     共有<xsl:value-of select="$pages" />页---</td>
     </tr>
     </xsl:when>
     <xsl:when test="$page = $pages">
     <tr>
     <td>第<xsl:value-of select="$page" />页---
      <a href="#{$page - 1}" onclick="prevPage({$page - 1})">上一页</a>---
      共有<xsl:value-of select="$pages" />页---</td>
    </tr>  
     </xsl:when>
     <xsl:otherwise>
    <tr>  
    <td>第<xsl:value-of select="$page" />页---
      <a href="#{$page - 1}" onclick="prevPage({$page - 1})">上一页</a>---
      <a href="#{$page + 1}" onclick="nextPage({$page + 1})">下一页</a>---
      共有<xsl:value-of select="$pages" />页---</td>
      </tr>
     </xsl:otherwise>
    </xsl:choose>
   </table>
</table>
    </xsl:template>
</xsl:stylesheet>


--  作者:zlgbsltang
--  发布时间:8/26/2008 10:19:00 PM

--  
怎么没人帮我看看呢  我的运行起来 总提示 缺少对象  555555555
<?xml version="1.0" encoding="GB2312"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output method="html" encoding="GB2312"/> 
<xsl:param name="size" select="1"/>

<xsl:template match="idCard">
<html>
<script>
<![CDATA[
   function nextPage(num){
    document.getElementById("content"+num).style.display="";
    num--;
    document.getElementById("content"+num).style.display="none";
   }
   function prevPage(num){
    document.getElementById("content"+num).style.display="";
    num++;
    document.getElementById("content"+num).style.display="none";
   }
   function onInitialize(){
    var i = 1;
    document.getElementById("content"+i).style.display = "";
   }
]]>
</script>
<body onload="onInitialize()">
    <xsl:apply-templates select="person[position() mod $size = 1]">
     <xsl:with-param name="pages" select="ceiling(count(person) div $size)"/>
    </xsl:apply-templates>
   </body>
</html>
</xsl:template>

<xsl:template match="person">
<xsl:param name="pages"/>
<xsl:variable name="page" select="position()"/>
<table id='content{$page}' style="display:'none'" title="content{$page}">
<xsl:for-each select="self::person | following-sibling::person[position()&lt;$size]">
     <table border="1">
        <tr>
            <th>姓名</th>
            <td><xsl:value-of select="name"/></td>
            <xsl:if test="gender='男'">
                <td rowspan="5"><img src="imgs/a.jpg" /></td>
            </xsl:if>
            <xsl:if test="gender='女'">
                <td rowspan="5"><img src="imgs/b.jpg"/></td>
            </xsl:if>  
        </tr>
        <tr>
            <th>性别</th>
            <td><xsl:value-of select="gender"/></td>
        </tr>
        <tr>
        <th>民族</th>
            <td><xsl:value-of select="race"/></td>
        </tr>
        <tr>
            <th>出生</th>
            <td><xsl:value-of select="birthday"/></td>
        </tr>
        <tr>
            <th>住址</th>
            <td><xsl:value-of select="address"/></td>
        </tr>
        <th>公民身份号码</th>
            <td><xsl:value-of select="id"/></td>
        </table>
    </xsl:for-each>
<table id="navBar" border="1">
    <xsl:choose>
     <xsl:when test="$page = 1">
     <tr>
     <td> 第<xsl:value-of select="$page" />页---
     <a href="#{$page + 1}" onclick="nextPage({$page + 1})">下一页</a>---
     共有<xsl:value-of select="$pages" />页---</td>
     </tr>
     </xsl:when>
     <xsl:when test="$page = $pages">
     <tr>
     <td>第<xsl:value-of select="$page" />页---
      <a href="#{$page - 1}" onclick="prevPage({$page - 1})">上一页</a>---
      共有<xsl:value-of select="$pages" />页---</td>
    </tr>  
     </xsl:when>
     <xsl:otherwise>
    <tr>  
    <td>第<xsl:value-of select="$page" />页---
      <a href="#{$page - 1}" onclick="prevPage({$page - 1})">上一页</a>---
      <a href="#{$page + 1}" onclick="nextPage({$page + 1})">下一页</a>---
      共有<xsl:value-of select="$pages" />页---</td>
      </tr>
     </xsl:otherwise>
    </xsl:choose>
   </table>
</table>
    </xsl:template>
</xsl:stylesheet>


--  作者:Qr
--  发布时间:8/27/2008 9:03:00 AM

--  
把<script>写在head区中,否则,在XSL中可能会出现意外。另外,最好提供XML源码,别让别人去帮你弄一个,光看XSL很麻烦的,特别是一长串。
--  作者:zlgbsltang
--  发布时间:8/27/2008 4:41:00 PM

--  
Qr大哥 你好 我放在了<head>里了 还是提示 缺少对象
你帮我看看吧?
我的xml源文件:
<?xml version="1.0" encoding="GB2312"?>
<?xml-stylesheet type="text/xsl" href="style.xsl"?> 
<idCard>
 <person>
  <name>杨萍</name>
  <gender>女</gender>
  <race>汉</race>
  <birthday>19871011</birthday>
  <address>河南省滑县半坡店乡</address>
  <id>
   <addrCode>410526</addrCode>
   <birthday>19871011</birthday>
   <seqCode>758</seqCode>
   <checkCode>3</checkCode>
  </id>
 </person>
 <person>
  <name>王小波</name>
  <gender>男</gender>
  <race>汉</race>
  <birthday>19850410</birthday>
  <address>河南省延津县小王村</address>
  <id>
   <addrCode>410726</addrCode>
   <birthday>19850410</birthday>
   <seqCode>521</seqCode>
   <checkCode>5</checkCode>
  </id>
 </person>
 <person>
  <name>李玟</name>
  <gender>女</gender>
  <race>回族</race>
  <birthday>19761023</birthday>
  <address>河南省浚县于村</address>
  <id>
   <addrCode>410621</addrCode>
   <birthday>19761023</birthday>
   <seqCode>202</seqCode>
   <checkCode>x</checkCode>
  </id>
 </person>
 <person>
  <name>张佳佳</name>
  <gender>女</gender>
  <race>东乡族</race>
  <birthday>19621103</birthday>
  <address>河南省汤阴县大马村</address>
  <id>
   <addrCode>410523</addrCode>
   <birthday>19621103</birthday>
   <seqCode>862</seqCode>
   <checkCode>5</checkCode>
  </id>
 </person>
 <person>
  <name>李小鹏</name>
  <gender>男</gender>
  <race>汉</race>
  <birthday>19700523</birthday>
  <address>河南省宝丰县李村</address>
  <id>
   <addrCode>410421</addrCode>
   <birthday>19700523</birthday>
   <seqCode>403</seqCode>
   <checkCode>5</checkCode>
  </id>
 </person>
 <person>
  <name>崔伟</name>
  <gender>男</gender>
  <race>壮族</race>
  <birthday>19560413</birthday>
  <address>河南省温县大石庄</address>
  <id>
   <addrCode>410825</addrCode>
   <birthday>19560413</birthday>
   <seqCode>851</seqCode>
   <checkCode>x</checkCode>
  </id>
 </person>
 <person>
  <name>唐小雨</name>
  <gender>女</gender>
  <race>汉</race>
  <birthday>19900529</birthday>
  <address>河南省滑县枣村</address>
  <id>
   <addrCode>410526</addrCode>
   <birthday>19900529</birthday>
   <seqCode>022</seqCode>
   <checkCode>6</checkCode>
  </id>
 </person>
 <person>
  <name>白冰</name>
  <gender>男</gender>
  <race>布依族</race>
  <birthday>19660214</birthday>
  <address>河南省清丰县大班村</address>
  <id>
   <addrCode>410922</addrCode>
   <birthday>19660214</birthday>
   <seqCode>369</seqCode>
   <checkCode>8</checkCode>
  </id>
 </person>
 <person>
  <name>周董</name>
  <gender>男</gender>
  <race>汉</race>
  <birthday>19890111</birthday>
  <address>河南省镇平县李湾村</address>
  <id>
   <addrCode>411324</addrCode>
   <birthday>19890111</birthday>
   <seqCode>101</seqCode>
   <checkCode>7</checkCode>
  </id>
 </person>
 <person>
  <name>吴小霞</name>
  <gender>女</gender>
  <race>侗族</race>
  <birthday>19771205</birthday>
  <address>河南省西华县王庄村</address>
  <id>
   <addrCode>411622</addrCode>
   <birthday>19771205</birthday>
   <seqCode>122</seqCode>
   <checkCode>4</checkCode>
  </id>
 </person>
</idCard>

xsl源文件:
<?xml version="1.0" encoding="GB2312"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output method="html" encoding="GB2312"/> 
<xsl:param name="size" select="1"/>

<xsl:template match="idCard">
<html>
<script>
<![CDATA[
   function nextPage(num){
    document.getElementById("content"+num).style.display="";
    num--;
    document.getElementById("content"+num).style.display="none";
   }
   function prevPage(num){
    document.getElementById("content"+num).style.display="";
    num++;
    document.getElementById("content"+num).style.display="none";
   }
   function onInitialize(){
    var i = 1;
    document.getElementById("content"+i).style.display = "";
   }
]]>
</script>
<body onload="onInitialize()">
    <xsl:apply-templates select="person[position() mod $size = 1]">
     <xsl:with-param name="pages" select="ceiling(count(person) div $size)"/>
    </xsl:apply-templates>
   </body>
</html>
</xsl:template>

<xsl:template match="person">
<xsl:param name="pages"/>
<xsl:variable name="page" select="position()"/>
<table id='content{$page}' style="display:'none'" title="content{$page}">
<xsl:for-each select="self::person | following-sibling::person[position()&lt;$size]">
     <table border="1">
        <tr>
            <th>姓名</th>
            <td><xsl:value-of select="name"/></td>
            <xsl:if test="gender='男'">
                <td rowspan="5"><img src="imgs/a.jpg" /></td>
            </xsl:if>
            <xsl:if test="gender='女'">
                <td rowspan="5"><img src="imgs/b.jpg"/></td>
            </xsl:if>  
        </tr>
        <tr>
            <th>性别</th>
            <td><xsl:value-of select="gender"/></td>
        </tr>
        <tr>
        <th>民族</th>
            <td><xsl:value-of select="race"/></td>
        </tr>
        <tr>
            <th>出生</th>
            <td><xsl:value-of select="birthday"/></td>
        </tr>
        <tr>
            <th>住址</th>
            <td><xsl:value-of select="address"/></td>
        </tr>
        <th>公民身份号码</th>
            <td><xsl:value-of select="id"/></td>
        </table>
    </xsl:for-each>
<table border="1">                      
    <xsl:choose>
     <xsl:when test="$page = 1">
     <tr>
     <td> 第<xsl:value-of select="$page" />页---
     <a href="#{$page + 1}" onclick="nextPage({$page + 1})">下一页</a>---
     共有<xsl:value-of select="$pages" />页---</td>
     </tr>
     </xsl:when>
     <xsl:when test="$page = $pages">
     <tr>
     <td>第<xsl:value-of select="$page" />页---
      <a href="#{$page - 1}" onclick="prevPage({$page - 1})">上一页</a>---
      共有<xsl:value-of select="$pages" />页---</td>
    </tr>  
     </xsl:when>
     <xsl:otherwise>
    <tr>  
    <td>第<xsl:value-of select="$page" />页---
      <a href="#{$page - 1}" onclick="prevPage({$page - 1})">上一页</a>---
      <a href="#{$page + 1}" onclick="nextPage({$page + 1})">下一页</a>---
      共有<xsl:value-of select="$pages" />页---</td>
      </tr>
     </xsl:otherwise>
    </xsl:choose>
   </table>
</table>
    </xsl:template>
</xsl:stylesheet>


--  作者:Qr
--  发布时间:8/27/2008 4:53:00 PM

--  
<xsl:apply-templates select="person[position() mod $size = 1]">因为这一行,所以代码根本就没法往下执行,你先好好想想,修正代码吧。
--  作者:zlgbsltang
--  发布时间:8/27/2008 5:03:00 PM

--  
我发现:当我把<xsl:param name="size" select="1"/> 改为2,3之类,只要不是1就不会发生缺少对象的错误  可以运行  不过同时又有问题了:仍然不能分页,只不过是$size条记录之后会有 “上一页” “下一页” 的超链接  但整体还是一页  点链接也不管用
????????????
我的世界开始

--  作者:Qr
--  发布时间:8/27/2008 5:17:00 PM

--  
那是因为<xsl:variable name="page" select="position()"/>
当size<>1时,实际上position()大于page,而你没有注意page这个参数,让position()始终等于page,当然js去getElementById就因找不到而出错了。
--  作者:zlgbsltang
--  发布时间:8/27/2008 5:47:00 PM

--  
Qr,我头都大了,你能不能帮我改改代码啊

--  作者:zlgbsltang
--  发布时间:8/27/2008 5:54:00 PM

--  
不好意思啊 只顾自己感受了  你也很忙
我还是自己来吧
但告诉我为什么连分页都分不了
--  作者:zlgbsltang
--  发布时间:8/28/2008 12:03:00 PM

--  
太好了 终于可以分页了 呵呵  原来table嵌套会出现问题   把那个父table改成div了
结果就好了
Qr,你再帮我看看我那个page应该怎么设置?才能使size为1时也正确?
--  作者:Qr
--  发布时间:8/28/2008 12:19:00 PM

--  
<xsl:apply-templates select="person[position() mod $size = 1]">
当size = 1,以上一行就导致无显示,而size > 1,分页结果正确
所以,你只需判断size,根据需要修改“[]”的逻辑运算即可使size为1时也正确。
--  作者:zlgbsltang
--  发布时间:8/28/2008 2:12:00 PM

--  
恩,终于好了 照着你说的 加了个choose条件 呵呵
非常感谢Qr

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