smhy8187

 

xsl+xml开发 怎样实现手动分页和自动分页?

xsl+xml开发 怎样实现手动分页和自动分页?
http://blog.163.com/wxdl_1029/blog/static/44690988200793015549830/

 

在xsl+xml开发的网站里,由于内容过长,怎样实现手动分页和自动分页?
现有的关于新闻的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来转成分页的形式

 

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

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


这样也是一种办法?


加[nextpage]是想加在新闻内容里,然后在前台读出来,在用js来判断分页,可以吗?
 

这个应该很完美的,可以做参考

<?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>

 

posted on 2008-01-25 09:34  new2008  阅读(674)  评论(0编辑  收藏  举报

导航