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) < $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 <= 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>