以文本方式查看主题

-  中文XML论坛 - 专业的XML技术讨论区  (http://bbs.xml.org.cn/index.asp)
--  『 XSL/XSLT/XSL-FO/CSS 』  (http://bbs.xml.org.cn/list.asp?boardid=8)
----  在此求救!关于在xsl+xml里分页的问题  (http://bbs.xml.org.cn/dispbbs.asp?boardid=8&rootid=&id=53220)


--  作者:sangzi
--  发布时间:9/28/2007 8:27:00 PM

--  在此求救!关于在xsl+xml里分页的问题
在xsl+xml开发的网站里,由于内容过长,怎样实现手动分页和自动分页啊
十万火急!在线等...
等Qr或斑竹啊


--  作者:luypmp
--  发布时间:9/28/2007 8:57:00 PM

--  
最简洁的xml+xsl分页
http://bbs.xml.org.cn/dispbbs.asp?boardID=8&ID=25500&replyID=16477&skin=1
使用 xsl 对 xml 文档进行动态排序分页显示[推荐]
http://bbs.xml.org.cn/dispbbs.asp?boardID=8&ID=7786

楼主可以看看孤独版主的XSL\XSLT板主题整理


--  作者:sangzi
--  发布时间:9/28/2007 9:25:00 PM

--  
大哥我讲的是每条新闻内容由于太长,想把他们分页(应该用js吧)来处理,但是js不熟悉,而不是对新闻进行分页。是新闻内容进行分页!
在麻烦下大哥!
--  作者:luypmp
--  发布时间:9/29/2007 12:33:00 AM

--  
楼主的意思是不是你现有的关于新闻的xml文件中的内容很长?
我觉得这也很好处理啊!
假设你的xml文件是这样的
<news>
<title>测试</title>
<content>非常长<content>
</news>
其中content的内容非常长
如果要实现手动分页,那么我们可以把<content>节点手动转化为:
<content>
<mini>非<mini>
<mini>常<mini>
<mini>长<mini>
</content>
这样就可以用"最简洁的xml+xsl分页"的实例来做了!只不过相应的这个实例的xslt文件
修改一下,把mini当成list下面的item.
如果要自动实现分页,我觉得可以先用一个xslt文件(使用string-length,substring)来把
原始新闻xml文件转化为现在这种xml形式的文件:
<content>
<mini>非<mini>
<mini>常<mini>
<mini>长<mini>
</content>
到时你在使用"最简洁的xml+xsl分页"的实例中的修改后的通用xslt来转成分页的形式

不知是否符合楼主的要求?


--  作者:Qr
--  发布时间:9/29/2007 6:58:00 AM

--  
对于此类分页,最好的办法就是生成XML时即将内容分快存储,如同4楼的做法,然后分页


--  作者:sangzi
--  发布时间:9/29/2007 12:34:00 PM

--  
谢谢luypmh和Qr
这样也是一种办法?
能不能加标记[NextPage],然后就判断标记实行分页不也是一种办法吗?
没有事情继续讨论
--  作者:luypmp
--  发布时间:9/29/2007 10:09:00 PM

--  
这样也是一种办法?

sangzi ,难道这种做法不能够实现你的要求?

能不能加标记[NextPage],然后就判断标记实行分页不也是一种办法吗?

不知到标记[NextPage]你想怎么加,加到那,能否举个例子?


--  作者:sangzi
--  发布时间:9/30/2007 8:45:00 AM

--  
首先先谢谢您!
你说的是可以满足我的要求的
但是我所说加[nextpage]是想加在新闻内容里,然后在前台读出来,在用js来判断分页,可以吗?
--  作者:luypmp
--  发布时间:10/1/2007 1:41:00 AM

--  
楼主可以参考这个实例:
使用 XSLT 进行断行
http://www.ibm.com/developerworks/cn/xml/tips/x-tiplnbrk/index.html
我把代码改了下,原来直接copy的运行不起来,
这个应该很完美的,可以做参考

<?xml version="1.0" encoding="gb2312"?>
<?xml-stylesheet type="text/xsl" href="D:\element1.xsl"?>
<example>
 <sometext>This is some element text that we'd like to have broken
  into multiple lines of no more than X characters each.</sometext>
</example>

<?xml version="1.0" encoding="gb2312"?>
<?xml-stylesheet type="text/xsl" href="D:\element1.xsl"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output method="html" encoding="gb2312"/>
 <xsl:template match="/example/sometext">
  <html>
   <head>
    <title/>
   </head>
   <body>
    <table>
     <tr>
      <td>
       <xsl:call-template name="breakText">
        <xsl:with-param name="strMsg" select="text()"/>
        <xsl:with-param name="numChars" select="15"/>
       </xsl:call-template>
      </td>
     </tr>
    </table>
   </body>
  </html>
 </xsl:template>
 <!--修改处-->
 <xsl:variable name="EOL">
  <br/>
 </xsl:variable>
 <xsl:variable name="BREAK" select="' '"/>
 <!--
  Breaks msg into one or more lines.
  Lines are broken at the numChars-th character, so each line will
  have no more than (numChars-1) characters each.
-->
 <xsl:template name="breakText">
  <xsl:param name="strMsg"/>
  <xsl:param name="numChars"/>
  <xsl:choose>
   <xsl:when test="string-length($strMsg) &lt; $numChars">
    <xsl:value-of select="$strMsg"/>
   </xsl:when>
   <xsl:otherwise>
    <xsl:variable name="strFirst">
     <xsl:call-template name="maxSubstringEndingWithBreak">
      <xsl:with-param name="strFragment" select="substring($strMsg,1,$numChars)"/>
     </xsl:call-template>
    </xsl:variable>
    <xsl:variable name="strRest" select="substring-after($strMsg,$strFirst)"/>
    <xsl:value-of select="$strFirst"/>
    <!--修改处-->
    <xsl:copy-of select="$EOL"/>
    <xsl:call-template name="breakText">
     <xsl:with-param name="strMsg" select="$strRest"/>
     <xsl:with-param name="numChars" select="$numChars"/>
    </xsl:call-template>
   </xsl:otherwise>
  </xsl:choose>
 </xsl:template>
 <!--
  Given parameter s, this function returns the maximal left
  substring of s ending in a break character. If there is no
  break character, then the entire string is returned.
-->
 <xsl:template name="maxSubstringEndingWithBreak">
  <xsl:param name="strFragment"/>
  <xsl:variable name="len" select="string-length($strFragment)"/>
  <xsl:choose>
   <xsl:when test="len &lt;= 1 or substring($strFragment,$len)=$BREAK
        or contains($strFragment,$BREAK)=false">
    <xsl:value-of select="$strFragment"/>
   </xsl:when>
   <xsl:otherwise>
    <xsl:call-template name="maxSubstringEndingWithBreak">
     <xsl:with-param name="strFragment" select="substring($strFragment, 1, $len - 1)"/>
    </xsl:call-template>
   </xsl:otherwise>
  </xsl:choose>
 </xsl:template>
</xsl:stylesheet>


--  作者:lastvagrant
--  发布时间:11/2/2007 1:16:00 AM

--  
路过
--  作者:foxu
--  发布时间:11/11/2007 2:32:00 PM

--  
以前做的一个自动分页的js

js--
function DHTMLpagenation(content) { with (this)
{this.content=content;
this.contentLength=content.length;
this.pageSizeCount;
this.perpageLength=800; //default perpage byte length.
this.currentPage=1;
//this.regularExp=/.+[\?\&]{1}page=(\d+)/;
this.regularExp=/\d+/;
this.divDisplayContent;
this.contentStyle=null;
this.strDisplayContent="";
this.divDisplayPagenation;
this.strDisplayPagenation="";
perpageLength;
arguments.length==2?perpageLength=arguments[1]:'';
try {divExecuteTime=document.createElement("DIV");
document.body.appendChild(divExecuteTime);}catch(e)
{}if(document.getElementById("divPagenation")){
divDisplayPagenation=document.getElementById("divPagenation");
}else{try{divDisplayPagenation=document.createElement("DIV");
divDisplayPagenation.id="divPagenation";
document.body.appendChild(divDisplayPagenation);}catch(e){return false;}}
if(document.getElementById("divContent"))
{divDisplayContent=document.getElementById("divContent");}else{try{divDisplayContent=document.createElement("DIV");
divDisplayContent.id="divContent";
document.body.appendChild(divDisplayContent);}
catch(e)
{return false;}}
DHTMLpagenation.initialize();
return this;}};
DHTMLpagenation.initialize=function() { with (this)
{divDisplayContent.className=contentStyle!=null?contentStyle:"divContent";
if(contentLength<=perpageLength)
{strDisplayContent=content;
divDisplayContent.innerHTML=strDisplayContent;
return null;}
pageSizeCount=Math.ceil((contentLength/perpageLength));
DHTMLpagenation.goto(currentPage);
DHTMLpagenation.displayContent();}};
DHTMLpagenation.displayPage=function() { with (this)
{strDisplayPagenation="";
if(currentPage&&currentPage!=1)
strDisplayPagenation+='<a href="#top" onclick="DHTMLpagenation.previous()">上一页</a>&nbsp;&nbsp;';
else
strDisplayPagenation+="上一页&nbsp;&nbsp;";
for(var i=1;i<=pageSizeCount;i++)
{if(i!=currentPage)
strDisplayPagenation+='<a href="#top" onclick="DHTMLpagenation.goto('+i+');">'+i+'</a>&nbsp;&nbsp;';
else
strDisplayPagenation+=i+"&nbsp;&nbsp;";}
if(currentPage&&currentPage!=pageSizeCount)
strDisplayPagenation+='<a href="#top" onclick="DHTMLpagenation.next()">下一页</a>&nbsp;&nbsp;';
else
strDisplayPagenation+="下一页&nbsp;&nbsp;";
divDisplayPagenation.innerHTML=strDisplayPagenation;}};
DHTMLpagenation.previous=function() { with(this)
{DHTMLpagenation.goto(currentPage-1);}};
DHTMLpagenation.next=function() { with(this)
{DHTMLpagenation.goto(currentPage+1);}};
DHTMLpagenation.goto=function(iCurrentPage) { with (this)
{startime=new Date();
if(regularExp.test(iCurrentPage))
{currentPage=iCurrentPage;
strDisplayContent=content.substr((currentPage-1)*perpageLength,perpageLength);}
else{alert("page parameter error!");}
DHTMLpagenation.displayPage();
DHTMLpagenation.displayContent();}};
DHTMLpagenation.displayContent=function() { with (this)
{divDisplayContent.innerHTML=strDisplayContent;}};
DHTMLpagenation(s,2000);


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