以文本方式查看主题

-  中文XML论坛 - 专业的XML技术讨论区  (http://bbs.xml.org.cn/index.asp)
--  『 XSL/XSLT/XSL-FO/CSS 』  (http://bbs.xml.org.cn/list.asp?boardid=8)
----  [原创]最简洁的xml+xsl分页  (http://bbs.xml.org.cn/dispbbs.asp?boardid=8&rootid=&id=25500)


--  作者:jomper
--  发布时间:12/15/2005 4:23:00 PM

--  [原创]最简洁的xml+xsl分页
参考了[XML本质论]的例子后写的分页,充分发挥了XSL和xpath的作用,弱化了对js的依赖。
page.xml
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="page.xsl" ?>
<list>
 <item>1</item>
 <item>2</item>
 <item>3</item>
 <item>4</item>
 <item>5</item>
 <item>6</item>
 <item>7</item>
 <item>8</item>
 <item>9</item>
 <item>10</item>
 <item>11</item>
 <item>12</item>
 <item>13</item>
</list>[/QUOTE]

page.xsl
[QUOTE]<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">

<xsl:param name="size" select="4"/>

 <xsl:template match="list">
  <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="item[position() mod $size = 1]">
     <xsl:with-param name="pages" select="ceiling(count(item) div $size)"/>
    </xsl:apply-templates>
   </body>
  </html>
 </xsl:template>

 <xsl:template match="item">
 <xsl:param name="pages"/>
 <xsl:variable name="page" select="position()"/>
  <div id='content{$page}' style="display:'none'" title="content{$page}">
  
   <xsl:for-each select="self::item | following-sibling::item[position() &lt; $size]">
    <div><xsl:value-of select="."/></div>
   </xsl:for-each>
  
   <div id="navBar">
    <xsl:choose>
     <xsl:when test="$page = 1">
      第<xsl:value-of select="$page" />页---
      <a href="#{$page + 1}" onclick="nextPage({$page + 1})">下一页</a>---
      共有<xsl:value-of select="$pages" />页---
     </xsl:when>
     <xsl:when test="$page = $pages">
      第<xsl:value-of select="$page" />页---
      <a href="#{$page - 1}" onclick="prevPage({$page - 1})">上一页</a>---
      共有<xsl:value-of select="$pages" />页---
     </xsl:when>
     <xsl:otherwise>
      第<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" />页---
     </xsl:otherwise>
    </xsl:choose>
   </div>
   
  </div>
 </xsl:template>
</xsl:stylesheet>



--  作者:fuxue
--  发布时间:12/15/2005 6:11:00 PM

--  
错误满版!!!!!!!!!!!!!!!!!!!!!!!!!!!!
--  作者:98900969r
--  发布时间:12/15/2005 6:59:00 PM

--  
其实没有什么错误,拷贝过来的时候,转义字符和标签乱了而以。就是好像encoding没解决。下面有处红色的地方突显了细微的改动。

page.xml

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="page.xsl" ?>
<list>
<item>1</item>
<item>2</item>
<item>3</item>
<item>4</item>
<item>5</item>
<item>6</item>
<item>7</item>
<item>8</item>
<item>9</item>
<item>10</item>
<item>11</item>
<item>12</item>
<item>13</item>
</list>

page.xsl

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">

<xsl:param name="size" select="4"/>

<xsl:template match="list">
  <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="item[position() mod $size = 1]">
     <xsl:with-param name="pages" select="ceiling(count(item) div $size)"/>
    </xsl:apply-templates>
   </body>
  </html>
</xsl:template>

<xsl:template match="item">
<xsl:param name="pages"/>
<xsl:variable name="page" select="position()"/>
  <div id='content{$page}' style="display:'none'" title="content{$page}">
  
   <xsl:for-each select="self::item | following-sibling::item[position() &amp;lt; $size]">
    <div><xsl:value-of select="."/></div>
   </xsl:for-each>
  
   <div id="navBar">
    <xsl:choose>
     <xsl:when test="$page = 1">
      第<xsl:value-of select="$page" />页---
      <a href="#{$page + 1}" onclick="nextPage({$page + 1})">下一页</a>---
      共有<xsl:value-of select="$pages" />页---
     </xsl:when>
     <xsl:when test="$page = $pages">
      第<xsl:value-of select="$page" />页---
      <a href="#{$page - 1}" onclick="prevPage({$page - 1})">上一页</a>---
      共有<xsl:value-of select="$pages" />页---
     </xsl:when>
     <xsl:otherwise>
      第<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" />页---
     </xsl:otherwise>
    </xsl:choose>
   </div>
   
  </div>
</xsl:template>
</xsl:stylesheet>


--  作者:jomper
--  发布时间:12/15/2005 9:17:00 PM

--  
是bbs的QUOTE标签有问题,不过内行点的朋友都看的懂.
98900969r提到的标签问题  &lt; 也是bbs的问题.
--  作者:zsxy168
--  发布时间:12/16/2005 9:43:00 AM

--  
98900969r好!
好象真的还有错哟,我测试时的错误提示信息是:
An invalid character was found in text content. Error processing resource 'file:///F:/web-jsp/xml/page.xsl'. Line 47, Posi...

第47行即为“第<xsl:value-of select="$page" />页---”


--  作者:fuxue
--  发布时间:12/16/2005 10:18:00 AM

--  
恩  符号要转义
   你们的UTF-8支持中文   我的不支持 ???????

--  作者:Qr
--  发布时间:12/16/2005 12:54:00 PM

--  
不错!
--  作者:98900969r
--  发布时间:12/16/2005 2:10:00 PM

--  
zsxy168, 你好。可我试的没有问题哦,只是ie不知道用哪个code set。
--  作者:jomper
--  发布时间:12/16/2005 3:00:00 PM

--  
关于"UTF不支持中文的解释".(UTF-8怎么会不支持中文呢?)
你新创建的文本(txt)默认是ANSI编码.所以你往里面写的数据都是这个编码.
但是你又在xml对这些ANSI编码的数据做了UTF-8的强制转码,所以你看到的中文是乱码.

其实在有乱码的文本重新输入中文就不会有问题了,因为此时已经是UTF-8编码了,或者你新创建文本的时候另存为UTF-8编码,也没有问题.


--  作者:gengwei80
--  发布时间:3/29/2006 11:02:00 AM

--  
不错!
--  作者:minspy
--  发布时间:4/7/2006 2:24:00 PM

--  
我是个菜鸟
我想就上面的讨论问个问题
如果XSL采用HTML模版是 有大量的CSS样式表
这些样式表有大量的定位的数据 ,这些样式表是怎么得到的呢
不会是自己在一个空白网页上看着办吧
有什么把矩形框一拖就可以得到想要的CSS样式表的数据么

--  作者:不太专一
--  发布时间:4/14/2006 8:34:00 PM

--  
我试的也有错
--  作者:逛子悠
--  发布时间:4/15/2006 3:06:00 PM

--  
very good~
--  作者:jomper
--  发布时间:4/15/2006 3:55:00 PM

--  
http://www.mycgiserver.com/~jomper/page.xml
这个是实例.
--  作者:minghangw
--  发布时间:5/16/2006 5:05:00 PM

--  
我运行的也有错误
文本内容中发现无效字符。处理资源 'file:///C:/Documents and Settings/Administrator/桌面/page.xsl' 时出错。第 46 行,位置: 7


--  作者:colourfish
--  发布时间:5/22/2006 3:49:00 PM

--  
理解了,但还需要继续咀嚼,谢谢~~~
--  作者:lian
--  发布时间:6/1/2006 5:27:00 PM

--  
哈...你的样式不支持 firefox ,在firefox 里.露原形了.哈...
--  作者:海苔
--  发布时间:6/1/2006 9:59:00 PM

--  
以下是引用minghangw在2006-5-16 17:05:00的发言:
我运行的也有错误
文本内容中发现无效字符。处理资源 'file:///C:/Documents and Settings/Administrator/桌面/page.xsl' 时出错。第 46 行,位置: 7



你试着按照页面中的文字把你编辑器里的改过来试试应该就好了


--  作者:gwang119
--  发布时间:6/2/2006 2:45:00 PM

--  
好呀!
--  作者:bruceshen
--  发布时间:6/14/2006 5:53:00 PM

--  
我的也不支持中文,我把encoding="gb2312"就可以了!大家可以试试
--  作者:guan1200
--  发布时间:6/14/2006 11:30:00 PM

--  
不错好思路
--  作者:bruceshen
--  发布时间:6/16/2006 6:00:00 PM

--  
我也运行了,就是个符号有问题,其他OK
--  作者:蚯蚓昆虫
--  发布时间:1/22/2007 11:00:00 PM

--  
内码转成真正的utf-8可以用vim
--  作者:hexun831012
--  发布时间:1/23/2007 9:17:00 AM

--  
其实最好的分页应该用xpath,而不是隐藏
--  作者:hexun831012
--  发布时间:1/24/2007 9:19:00 AM

--  
最简洁最高效的xml分页应该是xpath而不是页面隐藏
--  作者:lhsunrice
--  发布时间:4/29/2007 11:27:00 AM

--  
<body onload="onInitialize()">
    <xsl:apply-templates select="item[position() mod $size = 1]">
     <xsl:with-param name="pages" select="ceiling(count(item) div $size)"/>
    </xsl:apply-templates>
   </body>

请问这段代码是什么意思啊?


--  作者:oracle
--  发布时间:5/18/2007 9:59:00 PM

--  
太好了,正在学习
--  作者:feiyun1223
--  发布时间:5/28/2007 5:17:00 PM

--  
改了的好像不对的
--  作者:wlpx
--  发布时间:6/2/2007 11:05:00 AM

--  
那个实例下不了,也打不开啊.如果你用着好使,把相关的文件,下载地址链上来,我们下载回去就能试了.
--  作者:angel010
--  发布时间:8/6/2007 9:04:00 AM

--  
不支持firefox
--  作者:sophieqd
--  发布时间:8/24/2007 9:19:00 AM

--  
好,希望能够多处这样的教程与代码阿!谢谢了!
--  作者:sophieqd
--  发布时间:8/24/2007 9:24:00 AM

--  
???????????????????
--  作者:907941727
--  发布时间:6/24/2008 9:40:00 AM

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