满分求救XSL分页、排序问题,高手快快来啊

wd_terry 2006-01-06 09:24:05
XML文件:
<?xml version="1.0" encoding="GB2312"?>
<?xml-stylesheet type="text/xsl" href="okxrpic.xsl"?>
<okxrpic>
<pic>
<id>1</id>
<name>测试</name>
<type>mxxz</type>
<!--图片地址列表-->
<urls>
<url>images/1.gif</url>
<url>images/2.gif</url>
</urls>
</pic>
<!--回复列表-->
<replys>
<reply>
<!--回复号-->
<replyid>1</replyid>
<!--回复人签名-->
<username>ghb</username>
<!--图片ID-->
<picid>1</picid>
<replytime>2005-12-10</replytime>
<content>回复测试</content>
<replyip>127.0.0.1</replyip>
</reply>
<reply>
<!--回复号-->
<replyid>2</replyid>
<!--回复人签名-->
<username>ghb</username>
<!--图片ID-->
<picid>1</picid>
<replytime>2005-12-10</replytime>
<content>回复测试2</content>
<replyip>127.0.0.1</replyip>
</reply>
<reply>
<!--回复号-->
<replyid>3</replyid>
<!--回复人签名-->
<username>ghb</username>
<!--图片ID-->
<picid>1</picid>
<replytime>2005-12-10</replytime>
<content>回复测试3</content>
<replyip>127.0.0.1</replyip>
</reply>
<reply>
<!--回复号-->
<replyid>4</replyid>
<!--回复人签名-->
<username>ghb</username>
<!--图片ID-->
<picid>1</picid>
<replytime>2005-12-10</replytime>
<content>回复测试4</content>
<replyip>127.0.0.1</replyip>
</reply>
<reply>
<!--回复号-->
<replyid>5</replyid>
<!--回复人签名-->
<username>ghb</username>
<!--图片ID-->
<picid>1</picid>
<replytime>2005-12-10</replytime>
<content>回复测试4</content>
<replyip>127.0.0.1</replyip>
</reply>
</replys>
</okxrpic>

我想提取okxrpic/replys下的内容分页显示,在网上早到如下JS分页函数,但它是对根节点下的元素分页,怎么改成对特定子目录(okxrpic/replys)下的元素分页呢?
//XML分页
function pages(Num)
{
var OnePageNum=2;
var PageNum=1;
var XMLPageNum=1;
stylesheet=document.XSLDocument;
source=document.XMLDocument;
nodes=source.documentElement.childNodes;
len=nodes.length;
for(i=1;i<=(len/OnePageNum);i++);
XMLPageNum=i;
var firstNum=0;
var lastNume=0;

if (Num=="first") {PageNum=1;}
if (Num=="previous") {if (PageNum>1) PageNum -=1;}
if (Num=="next") {if (PageNum<XMLPageNum) PageNum +=1;}
if (Num=="last") {PageNum =XMLPageNum;}

sortField=document.XSLDocument.selectSingleNode("//@expr");
firstNum=OnePageNum*(PageNum-1)+1;
lastNum=OnePageNum*(PageNum-1)+OnePageNum;
text="childnumber(this)>="+firstNum+" & childnumber(this)<="+lastNum;
sortField.value=text;
Layer1.innerHTML=source.documentElement.transformNode(stylesheet);
alert("长度:"+len+"num:"+Num+"sortfield:"+text+"html:"+Layer1.innerHTML);
}
...全文
224 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
ssm1226 2006-01-06
  • 打赏
  • 举报
回复
简单例子:


index.htm:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<title></title>
<meta name="GENERATOR" content="Microsoft Visual Studio .NET 7.1">
<meta name=ProgId content=VisualStudio.HTML>
<meta name=Originator content="Microsoft Visual Studio .NET 7.1">
<SCRIPT language="javascript">
var xmltemplate;
var xmldoc=new ActiveXObject('MSXML2.DOMDocument');
var xsldoc=new ActiveXObject('MSXML2.FreeThreadedDOMDocument');
var iCount=0;
var iPageNo=1;
var iPageCount=0;
var iPageSize=3;

//初始化...
function init()
{
xmldoc.async = false;
xmldoc.load('csdn.xml');
var oNodeList=xmldoc.selectNodes("//reply");
iCount=oNodeList.length;

if(iCount>0)
iPageCount = Math.ceil(iCount / iPageSize);

info.innerHTML="总数据:" + iCount + "  总页数:" + iPageCount;

xsldoc.async = false;
xsldoc.load('csdn.xsl');
xmltemplate = new ActiveXObject("Msxml2.XSLTemplate");
xmltemplate.stylesheet = xsldoc;

show(0);
}

function show(pageno)
{

var objXSLTProc = xmltemplate.createProcessor();
objXSLTProc.input = xmldoc;
objXSLTProc.addParameter("pageno",iPageNo, "");
objXSLTProc.addParameter("pagesize",iPageSize, "");

objXSLTProc.transform();
oDiv.innerHTML = objXSLTProc.output;
}
function toPage(f){
iPageNo=iPageNo + f;
if(iPageNo<1){alert('已经是第一页了!');iPageNo=1; return;};
if(iPageNo>iPageCount) {alert('已经是最后一页了');iPageNo=iPageCount;return;};
show(iPageNo);
}
</SCRIPT>
</head>
<body onload="init()">
<div id=info></div>
<a href='#' onclick='toPage(-1)'>上页</a>  <a href='#' onclick='toPage(1)'>下页</a>
<div id='oDiv'>loading...</div>
</body>
</html>



csdn.xml

你的xml文件

csdn.xsl
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:param name="pageno">1</xsl:param>
<xsl:param name="pagesize">0</xsl:param>
<xsl:template match="/">
<xsl:for-each select="/okxrpic/replys/reply">
<xsl:if test="position() > (number($pageno)-1)*number($pagesize) and position() <= (number($pageno) * number($pagesize))">
回复号:<xsl:value-of select="replyid"/><br/>
用户名:<xsl:value-of select="username"/><br/>
<hr/>
</xsl:if>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>

wd_terry 2006-01-06
  • 打赏
  • 举报
回复
ssm1226(雨中人@忙晕了) 的例子怎么点下一页后还是显示的第一页啊?
wd_terry 2006-01-06
  • 打赏
  • 举报
回复
fsdy2000(乡愁)
你在你的stylesheet中把其他信息都输出,然后根据firstNum、lastNum、sortField把okxrpic/replys节点显示出来就行了。
——————————————————————————————
能不能说具体点呢,我对XML才接触,用点代码示范下好吗?谢谢!
wd_terry 2006-01-06
  • 打赏
  • 举报
回复
ssm1226(雨中人@忙晕了) 的要刷新页面,可不可以不刷新页面啊
fsdy2000 2006-01-06
  • 打赏
  • 举报
回复
你在你的stylesheet中把其他信息都输出,然后根据firstNum、lastNum、sortField把okxrpic/replys节点显示出来就行了。
wd_terry 2006-01-06
  • 打赏
  • 举报
回复
好样的
ssm1226 2006-01-06
  • 打赏
  • 举报
回复
http://ms.mblogger.cn/ssm1226/posts/16879.aspx
自然框架 2006-01-06
  • 打赏
  • 举报
回复
帮你订
wd_terry 2006-01-06
  • 打赏
  • 举报
回复
stylesheet=document.XSLDocument;
source=document.XMLDocument;
nodes=source.documentElement.childNodes;
现在的问题是:有没有办法把上面三个的值改成对子节点的(okxrpic/replys)操作

wd_terry 2006-01-06
  • 打赏
  • 举报
回复
楼上方法果然顶用,再次万分感谢(不过这里只有100分,而且还要分点给热心参与者^_^:)
我把XSL文件分成两个XSL文件,然后把 xmldoc.load('csdn.xml');改为xmldoc.load(location.href);就可以实现不用数据岛而用XSL表示了最后代码如下:
XML引用的XSL:
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:param name="pageno">1</xsl:param>
<xsl:param name="pagesize">2</xsl:param>
<xsl:template match="/">
<html>
<head>
<title>kkk</title>
<SCRIPT language="javascript">
<xsl:comment><![CDATA[
var xmltemplate;
var xmldoc=new ActiveXObject('MSXML2.DOMDocument');
var xsldoc=new ActiveXObject('MSXML2.FreeThreadedDOMDocument');
var iCount=0;
var iPageNo=1;
var iPageCount=0;
var iPageSize=3;

//初始化...
function init()
{
xmldoc.async = false;
xmldoc.load(location.href);
var oNodeList=xmldoc.selectNodes("//reply");
iCount=oNodeList.length;alert(iCount);

if(iCount>0)
iPageCount = Math.ceil(iCount / iPageSize);

info.innerHTML="总数据:" + iCount + "  总页数:" + iPageCount;

xsldoc.async = false;
xsldoc.load('csdn.xsl');
xmltemplate = new ActiveXObject("Msxml2.XSLTemplate");
xmltemplate.stylesheet = xsldoc;

show(0);
}

function show(pageno)
{

var objXSLTProc = xmltemplate.createProcessor();
objXSLTProc.input = xmldoc;
objXSLTProc.addParameter("pageno",iPageNo, "");
objXSLTProc.addParameter("pagesize",iPageSize, "");

objXSLTProc.transform();
oDiv.innerHTML = objXSLTProc.output;
}
function toPage(f){
iPageNo=iPageNo + f;
if(iPageNo<1){alert('已经是第一页了!');iPageNo=1; return;};
if(iPageNo>iPageCount) {alert('已经是最后一页了');iPageNo=iPageCount;return;};
show(iPageNo);
}
]]></xsl:comment>
</SCRIPT>
</head>
<body onload="init();">
<table>
<tr>
<th>
<div id="info"></div>
</th>
</tr>
<div id='oDiv'>loading...</div>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
CSDN.XSL:(改为可以按回复的ID倒序排列)
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:param name="pageno">1</xsl:param>
<xsl:param name="pagesize">3</xsl:param>
<xsl:template match="/">
<xsl:for-each select="/okxrpic/replys/reply">
<xsl:sort order="descending" select="replyid"/>
<xsl:if test="position() > (number($pageno)-1)*number($pagesize) and position() <= (number($pageno) * number($pagesize))">
回复号:<xsl:value-of select="replyid"/><br/>
用户名:<xsl:value-of select="username"/><br/>
内容:<xsl:value-of select="content"/><br/>
<hr/>
</xsl:if>
</xsl:for-each>
<a href='#' onclick='toPage(-1)'>上页</a> <a href='#' onclick='toPage(1)'>下页</a>
</xsl:template>
</xsl:stylesheet>
wd_terry 2006-01-06
  • 打赏
  • 举报
回复
多谢ssm1226(雨中人@忙晕了)的热心帮助,请问下能不能不用数据岛的形式,而是直接写入XSL文件,怎么实现?谢谢
内容概要:本文围绕城市场景下的无人机三维路径规划问题,提出了一种新颖的多目标粒子群优化算法(NMOPSO),旨在解决高维复杂环境中路径规划面临的多重挑战。研究聚焦于导航变量的多目标优化,构建了一个包含路径长度、飞行安全性、能量消耗等多个相互冲突目标的优化模型,并采用改进的粒子群算法进行高效搜索,最终获得一组Pareto最优解集,为实际决策提供多样化路径选择方案。该方法结合Matlab代码实现,详细阐述了算法的设计机制、数学建模流程及仿真验证过程,充分展示了其在密集城市建筑环境中有效规避障碍物、满足飞行动力学约束并实现多目标权衡的能力,具有较强的工程应用价值。; 适合人群:具备一定优化算法理论基础和Matlab编程能力,从事无人机路径规划、智能交通系统、自动化控制、人工智能应用等方向研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①应用于城市环境中的无人机物流配送、巡检监控、应急救援等实际任务的三维路径规划;②为高维、非线性、多约束的多目标优化问题提供有效的算法设计思路与改进参考;③通过Matlab仿真平台复现算法,进一步开展性能测试、参数调优与算法对比研究,推动相关领域的技术创新。; 阅读建议:此资源强调算法原理与工程实践的深度融合,建议读者重点研读目标函数的构建方式、约束条件的处理策略以及NMOPSO算法的核心改进机制,并务必动手运行和调试所提供的Matlab代码,以深入理解算法在三维空间路径优化中的具体实现细节与实际表现。
内容概要:本文档围绕基于10机39节点的电力系统仿真展开,依托Matlab/Simulink平台构建标准电力系统模型,系统性地实现了电力系统稳态与暂态过程的仿真分析。内容涵盖潮流计算、短路故障、暂态稳定性、N-k故障分析、蓄意攻击与级联故障模拟等核心问题,并引入混合整数线性规划(MILP)等优化方法进行电网脆弱性评估与关键故障筛选。文档突出科研复现导向,整合了状态估计、虚假数据注入攻击、优化算法等前沿技术的交叉应用,具有较强的理论深度与工程实践价值。; 适合人群:具备电力系统基本理论知识和Matlab/Simulink仿真能力的研究生、科研人员及电力工程技术人员,特别适用于从事电力系统稳定性分析、安全防护、故障演化机制与优化调度等领域研究的专业人士。; 使用场景及目标:① 掌握10机39节点系统的建模方法与仿真流程;② 学习并复现电力系统典型故障(如短路、N-k故障、级联故障)的建模与动态响应分析;③ 理解基于MILP的电网脆弱性评估、攻击策略建模与故障传播机制;④ 结合优化算法开展电力系统安全防御、恢复策略与韧性提升研究。; 阅读建议:建议结合文档中标注的“顶级EI复现”“核心论文复现”等标签,重点关注模型构建逻辑与代码实现细节,优先运行仿真案例以理解其物理背景与数学建模原理,同时深入分析故障场景设定、目标函数设计及优化求解策略的工程意义与学术价值。

8,906

社区成员

发帖
与我相关
我的任务
社区描述
XML/XSL相关问题讨论专区
社区管理员
  • XML/XSL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧