如果数据源是XML,那么诸如排序这样的功能是在服务器端完成还是在客户端完成呢?

Asprilla 2003-02-07 02:29:25
如果数据源是XML,那么诸如排序这样的功能是在服务器端完成还是在客户端完成呢?
譬如客户端完成可以减轻服务器压力和资源。
请举例,多谢。譬如排序这样不一定需要在服务器端实现的功能我如何实现,通过什么技术?
...全文
100 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
Asprilla 2003-02-13
  • 打赏
  • 举报
回复
同一数据既保存在db又保存在XML么?还是db里只保存一个xml的指向?
leonzhao 2003-02-12
  • 打赏
  • 举报
回复
csdn'forum的垃圾流程:

入库流程:
进入数据库->生成XML->Over。
^^^^^^^这一步竟然是由用户触发的,如果正好用户没完做就……404了!


检索获取流程:
通过ID直接将用户转送到XML文件。
^^^^也不先看看这个文件是不是存在??!!

删除流程
先删数据库记录->有时好像不删文件。
^^^^^^^^^^^^^^怎么想都应该后删记录的!
Asprilla 2003-02-12
  • 打赏
  • 举报
回复
来人说说csdn'forum的数据流程。
xuetinge 2003-02-11
  • 打赏
  • 举报
回复
哦,原来是习惯看一堆代码啊?

上面有位提到不要使用MS的方法排序,
但可以使用JS客户端进行排序,(上面好像已经给出例子)
也可以使用xalan服务器端排序。用法到这去看
http://xml.apache.org/xalan-j/index.html
Asprilla 2003-02-10
  • 打赏
  • 举报
回复
这个CSDN论坛的流程是什么样的?
用户提交信息,服务端加入信息到XML文件,之后通过XSLT显示给用户么?
Asprilla 2003-02-10
  • 打赏
  • 举报
回复
对了,灯泡。现在csdn这个论坛用的什么模式?XML+XSLT+JAVA??
Asprilla 2003-02-10
  • 打赏
  • 举报
回复
to disk
是这样一个报表需要俺每个栏目排序,那么他每次排序都要通过服务器端就有些过分了。第一次生成数据时我会按默认排序栏目排序的。

to 灯泡
我这个需求不是很明确,我想减轻服务器压力,因为终端用户会很多。并发现象肯定会有。

to 红星星
谢谢
redstarstar 2003-02-10
  • 打赏
  • 举报
回复
data.xml

<?xml version="1.0" encoding="gb2312"?>
<list-set>
<list>
<ID>1</ID>
<用户名>张三</用户名>
<IP>192.168.0.1</IP>
<日期>2002-12-11 5:16:28</日期>
<电子邮件>test</电子邮件>
<备注>why not me?</备注>
</list>
<list>
<ID>2</ID>
<用户名>李四</用户名>
<IP>192.168.0.2</IP>
<日期>2002-12-11 22:24:16</日期>
<电子邮件>test</电子邮件>
<备注>test</备注>
</list>
<list>
<ID>3</ID>
<用户名>王五</用户名>
<IP>192.168.0.3</IP>
<日期>2002-12-12 23:24:37</日期>
<电子邮件>fengwusan@163.com</电子邮件>
<备注>blood is red</备注>
</list>
<list>
<ID>4</ID>
<用户名>郭六</用户名>
<IP>192.168.0.4</IP>
<日期>2002-12-12 23:25:58</日期>
<电子邮件>fffffffff</电子邮件>
<备注>ffffffffffff</备注>
</list>
<list>
<ID>5</ID>
<用户名>李鸿</用户名>
<IP>192.168.0.5</IP>
<日期>2002-12-11 5:16:28</日期>
<电子邮件>test</电子邮件>
<备注>test</备注>
</list>
<list>
<ID>6</ID>
<用户名>苏素奎</用户名>
<IP>192.168.0.6</IP>
<日期>2002-12-11 22:24:16</日期>
<电子邮件>test</电子邮件>
<备注>test</备注>
</list>
<list>
<ID>7</ID>
<用户名>欧库歌</用户名>
<IP>192.168.0.7</IP>
<日期>2002-12-12 23:24:37</日期>
<电子邮件>fengwusan@163.com</电子邮件>
<备注>blood is red</备注>
</list>
<list>
<ID>8</ID>
<用户名>彗尔图</用户名>
<IP>192.168.0.8</IP>
<日期>2002-12-12 23:25:58</日期>
<电子邮件>fffffffff</电子邮件>
<备注>ffffffffffff</备注>
</list>
<list>
<ID>9</ID>
<用户名>苟流动</用户名>
<IP>192.168.0.9</IP>
<日期>2002-12-11 5:16:28</日期>
<电子邮件>test</电子邮件>
<备注>test</备注>
</list>
<list>
<ID>10</ID>
<用户名>郑流股</用户名>
<IP>192.168.0.10</IP>
<日期>2002-12-11 22:24:16</日期>
<电子邮件>test</电子邮件>
<备注>test</备注>
</list>
<list>
<ID>11</ID>
<用户名>Jack</用户名>
<IP>192.168.0.11</IP>
<日期>2002-12-12 23:24:37</日期>
<电子邮件>fengwusan@163.com</电子邮件>
<备注>blood is red</备注>
</list>
<list>
<ID>12</ID>
<用户名>Mike</用户名>
<IP>192.168.0.12</IP>
<日期>2002-12-12 23:25:58</日期>
<电子邮件>fffffffff</电子邮件>
<备注>ffffffffffff</备注>
</list>
</list-set>
redstarstar 2003-02-10
  • 打赏
  • 举报
回复
XMLPaging.html

<html>
<head>
<title>XML、XSLT分页(基于客户端)</title>
<script language="javascript">
var dataXml;
var pagingXsl;

var xslt;
var xslDoc
var xslProc;

var recordsPerPage = 5; //每页显示的纪录的行数
var currentPageNumber = 1; //当前显示的页码

function window.onload(){

dataXml = new ActiveXObject("Microsoft.XMLDOM");
dataXml.async = false;
dataXml.load("data.xml");

xslt = new ActiveXObject("Msxml2.XSLTemplate");
xslDoc = new ActiveXObject("Msxml2.FreeThreadedDOMDocument");

xslDoc.async = false;
xslDoc.resolveExternals = false;
xslDoc.load("paging.xsl");

xslt.stylesheet = xslDoc;
xslProc = xslt.createProcessor();
xslProc.input = dataXml;

this.initPagingNavigator();

xslProc.transform();
pagingDiv.innerHTML = xslProc.output;



}
function initPagingNavigator() {
var totalRecords = dataXml.selectNodes("/*/*").length;
var totalPageNumber = totalRecords/recordsPerPage;

if(totalPageNumber.toString().indexOf(".") == -1) {
if(totalPageNumber== 0) {
totalPageNumber= 1;
}
}
else {
totalPageNumber= new Number(totalPageNumber.toString().substring(0,totalPageNumber.toString().indexOf("."))) + 1;
}


var temp = currentPageNumber/10+0.4;
var beginPage = Math.round(temp)*10-(10-1);
var endPage = Math.round(temp)*10;
if(endPage > totalPageNumber) {
endPage = totalPageNumber;
}

//alert(beginPage+"--"+endPage);
//alert("totalPageNumber:"+totalPageNumber);
//alert("totalRecords:"+totalRecords);

xslProc.addParameter("totalRecords", totalRecords);
xslProc.addParameter("totalPageNumber", totalPageNumber);
xslProc.addParameter("recordsPerPage", recordsPerPage);
xslProc.addParameter("currentPageNumber", currentPageNumber);
xslProc.addParameter("beginPage", beginPage);
xslProc.addParameter("endPage", endPage);
}

function jumptoPage(pageNumber) {
setCurrentPageNumber(pageNumber);
initPagingNavigator();
xslProc.transform();
pagingDiv.innerHTML = xslProc.output;

}

function sortField(fieldName){
var sortNode = xslDoc.selectSingleNode("//xsl:sort/@select");
var sortNodeAttr = xslDoc.selectSingleNode("//xsl:sort/@order");
/*
if(sortNodeAttr.value == "ascending") {
alert("1")
sortNodeAttr.value = "descending";
}
else {
sortNodeAttr.value = "ascending";
}
sortNode.value = "/" + fieldName;

xslt.stylesheet = xslDoc;
xslProc = xslt.createProcessor();
xslProc.input = dataXml;

this.initPagingNavigator();

xslProc.transform();
pagingDiv.innerHTML = xslProc.output;
*/
//alert(fieldName);
//alert(xslDoc.selectSingleNode("//xsl:sort/@select").value);
}

function setRecordsPerPage(recordsPerPage) {
this.recordsPerPage = recordsPerPage
}

function setCurrentPageNumber(currentPageNumber) {
this.currentPageNumber = currentPageNumber;
}
</script>
<link rel="stylesheet" type="text/css" href="paging.css">
</head>
<body>
<div align="center">
<div id="pagingDiv">
</div>
</div>
</body>
</html>
redstarstar 2003-02-10
  • 打赏
  • 举报
回复
paging.xsl

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt" xmlns:user="http://www.risesoft.net">
<msxsl:script language="javascript" implements-prefix="user"><![CDATA[
function getName(node) {
elementName = node.item(0).nodeName;
return elementName;
}
]]></msxsl:script>
<xsl:param name="totalPageNumber" select="1"/>
<xsl:param name="recordsPerPage" select="5"/>
<xsl:param name="totalRecords" select="1"/>
<xsl:param name="currentPageNumber" select="1"/>
<xsl:param name="beginPage" select="1"/>
<xsl:param name="endPage" select="1"/>
<xsl:variable name="from" select="$recordsPerPage * ($currentPageNumber - 1) + 1"/>
<xsl:variable name="to">
<xsl:choose>
<xsl:when test="$totalPageNumber = $currentPageNumber">
<xsl:value-of select="$totalRecords"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$recordsPerPage*$currentPageNumber"/>
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:template match="/">
<table width="90%" cellpadding="0" cellspacing="1" border="0" style="font-size:12px" bgcolor="#9A9792">
<tr bgcolor="#E7E7E7" style="cursor: hand;padding:2px;font-size:13px;font-weight: bold;" align="center">
<xsl:for-each select="/*/*[1]/*">
<td>
<div onclick="sortField("{user:getName(.)}")"><xsl:value-of select="user:getName(.)"/></div>
</td>
</xsl:for-each>
</tr>
<xsl:for-each select="/*/*[position() >= $from and position() <= $to]">
<xsl:sort select="*[1]" order="ascending" data-type="number"/>
<tr bgcolor="#FFFFFF" align="center" style="padding:2px">
<xsl:for-each select="*">
<td>
<xsl:value-of select="."/>
</td>
</xsl:for-each>
</tr>
</xsl:for-each>
</table>
<xsl:call-template name="pageNavigator">
<xsl:with-param name="totalPageNumber" select="$totalPageNumber"/>
<xsl:with-param name="totalRecords" select="$totalRecords"/>
<xsl:with-param name="currentPageNumber" select="$currentPageNumber"/>
<xsl:with-param name="recordsPerPage" select="$recordsPerPage"/>
<xsl:with-param name="beginPage" select="$beginPage"/>
<xsl:with-param name="endPage" select="$endPage"/>
</xsl:call-template>
</xsl:template>
<xsl:template name="pageNavigator">
<xsl:param name="totalPageNumber"/>
<xsl:param name="totalRecords"/>
<xsl:param name="recordsPerPage"/>
<xsl:param name="currentPageNumber"/>
<xsl:param name="beginPage"/>
<xsl:param name="endPage"/>
<table width="90%" cellpadding="0" cellspacing="0" border="0" style="border:1px black none;font-size:12px" bgcolor="#E3E3E3">
<tr style="padding:2px">
<td align="center">
绗?#160;<xsl:value-of select="$from"/> 鏉?#160;鍒?
绗?#160;<xsl:value-of select="$to"/> 鏉?#160; 
绗?#160;<xsl:value-of select="$currentPageNumber"/> 椤?
  鎬?#160;<xsl:value-of select="$totalPageNumber"/> 椤?
  鍏?#160;<xsl:value-of select="$totalRecords"/> 鏉¤褰?
</td>
<td align="right">
<xsl:if test="$currentPageNumber >10">
<a href="javascript:jumptoPage({$beginPage - 1})"><<</a> 
</xsl:if>
<xsl:call-template name="printPages">
<xsl:with-param name="beginPage" select="$beginPage"/>
<xsl:with-param name="endPage" select="$endPage"/>
<xsl:with-param name="currentPageNumber" select="$currentPageNumber"/>
<xsl:with-param name="totalPageNumber" select="$totalPageNumber"/>
</xsl:call-template>
</td>
</tr>
</table>
</xsl:template>
<xsl:template name="printPages">
<xsl:param name="beginPage"/>
<xsl:param name="endPage"/>
<xsl:param name="currentPageNumber"/>
<xsl:param name="totalPageNumber"/>
<xsl:if test="$totalPageNumber > 1">
<xsl:if test="$beginPage <= $endPage">
<xsl:choose>
<xsl:when test="$beginPage = $currentPageNumber">
<xsl:value-of select="$beginPage"/> 
</xsl:when>
<xsl:otherwise>
<a href="javascript:jumptoPage({$beginPage})">
<xsl:value-of select="$beginPage"/>
</a> 
</xsl:otherwise>
</xsl:choose>
<xsl:if test="$beginPage = $endPage and $beginPage != $totalPageNumber">
<a href="javascript:jumptoPage({$endPage + 1})">>></a>
</xsl:if>
<xsl:call-template name="printPages">
<xsl:with-param name="beginPage" select="$beginPage + 1"/>
<xsl:with-param name="endPage" select="$endPage"/>
<xsl:with-param name="currentPageNumber" select="$currentPageNumber"/>
<xsl:with-param name="totalPageNumber" select="$totalPageNumber"/>
</xsl:call-template>
</xsl:if>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
leonzhao 2003-02-10
  • 打赏
  • 举报
回复
看来Asprilla你的客户端是IE。我的建议同disk,因为你直接把整个XML发给客户端实在是毫无意义的。

我的建议就是瘦客户端,服务器压力大一些没什么,可以升级硬件……

不过不管怎么说,其实决定这件事情的是应用需求,你有没有估计过你的用户并发,查询规模等服务器负载的数据?根据这些数据再考虑你应该使用什么方法。

to redstarstar(红星星)

javascript的代码能贴上来一份吗?
Asprilla 2003-02-09
  • 打赏
  • 举报
回复
xuetinge(薛挺) 给个xsl排序的例子吧。谢谢你的回复
我正在看XMLPattern.2个阿根廷人写的。等我看完和你们交流
redstarstar 2003-02-09
  • 打赏
  • 举报
回复
你可以去XML论坛查找一下有关基于XML使用XSLT进行分页显示的帖子,有一个4星还是5星的高人写了一个基于客户端分页显示的例子(他用的vbscript,其中包括排序)。我前两天照着他的例子也大概写了一个(我用的javascript,就是还没写排序那部分)。
不难的。
disk 2003-02-09
  • 打赏
  • 举报
回复
其实应该字检索数据那部分生成,你在检索数据的时候,按降序或升序检索数据,然后生成XML文件,这样生成的XML文件就是按一定顺序排序的。至于在客户端还是服务器端,要看你的程序要求了。
Asprilla 2003-02-09
  • 打赏
  • 举报
回复
灯泡我问个问题,你的意思是说定义好一个XML和XSLT以后还要用诸如XALAN\xerces来解析生成HTML?那么这时候排序功能是在客户端进行的还是服务器端?
leonzhao 2003-02-09
  • 打赏
  • 举报
回复
灯泡 summoned: HP 1 (刚干完体力活), MP 1(因此没睡好觉)

啊~~困……

to Asprilla(dont shoot me)

1、为什么要用Oracle的东西,XML的操作最好使用Open的包。
2、你的客户端是浏览器吗?还是自己写的小型应用(如Applet)?如果是浏览器的话建议服务器端处理,因为M$的xsl支持并不标准,也不完整,所以像CSDN这样的网站……我不说什么了。
3、排序很简单啊:

XML:
-------------------------------------------------------------
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="Books.xsl"?>
<Books>
<book category="reference">
<author last="Nigel" middle="" first="Rees" />
<title>Sayings of the Century</title>
<price>8.95</price>
</book>
<book category="fiction">
<author last="Evelyn" middle="" first="Waugh" />
<title>Sword of Honour</title>
<price>12.99</price>
</book>
<book category="children's book">
<author last="Rowling" middle="K." first="J." />
<title>Harry Potter and the Sorcerer's Stone</title>
<price>15.96</price>
</book>
<book category="children's book">
<author last="Williams" middle="Aurelia" first="Lori" />
<title>When Kambia Elaine Flew in from Neptune</title>
<price>13.60</price>
</book>
<book category="children's book">
<author last="Pullman" middle="" first="Philip" />
<title>The Amber Spyglass (His Dark Materials, No 3)</title>
<price>15.96</price>
</book>
<book category="fiction">
<author last="Herman" middle="" first="Melville" />
<title>Moby Dick</title>
<price>8.99</price>
</book>
<book category="fiction">
<author last="Grisham" middle="" first="John" />
<title>A Painted House</title>
<price>16.77</price>
</book>
<book category="fiction">
<author last="Binchy" middle="" first="Maeve" />
<title>Scarlet Feather</title>
<price>20.76</price>
</book>
<book category="fiction">
<author last="J." middle="R. R." first="Tolkien" />
<title>The Lord of the Rings</title>
<price>22.99</price>
</book>
</Books>

XSL:
-------------------------------------------------------------
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0"
xmlns:xalan="http://xml.apache.org/xslt">
<xsl:output method="xml" encoding="UTF-8" indent="yes" xalan:indent-amount="2"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/">
<xsl:call-template name="html"/>
</xsl:template>
<xsl:template name="body">
<body>
<h1>
<xsl:value-of select="'A list of books to be displayed in a web browser via html'"/>
</h1>
<xsl:call-template name="table"/>
</body>
</xsl:template>
<xsl:template name="head">
<head>
<title>
<xsl:value-of select="'title'"/>
</title>
</head>
</xsl:template>
<xsl:template name="html">
<html>
<xsl:call-template name="head"/>
<xsl:call-template name="body"/>
</html>
</xsl:template>
<xsl:template name="table">
<table>
<xsl:attribute name="border">
<xsl:value-of select="'2'"/>
</xsl:attribute>
<xsl:apply-templates select="/Books/book">
<xsl:sort select="@category"
order="ascending"
case-order="upper-first"
data-type="text"/>
<xsl:sort select="price/text()"
order="ascending"
case-order="upper-first"
data-type="number"/>
</xsl:apply-templates>
</table>
</xsl:template>
<xsl:template match="book">
<tr>
<td>
<xsl:value-of select="concat(author/@first, ' ', author/@last)"/>
</td>
<td>
<xsl:value-of select="title/text()"/>
</td>
<td>
<xsl:value-of select="@category"/>
</td>
<td>
<xsl:value-of select="price/text()"/>
</td>
</tr>
</xsl:template>
<xsl:template match="*|@*|comment()|processing-instruction()|text()">
<xsl:copy>
<xsl:apply-templates select="*|@*|comment()|processing-instruction()|text()"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
xuetinge 2003-02-08
  • 打赏
  • 举报
回复
直接发送到客房端,XSL来进行格式显示就好了。
1000个股票信息不多。
呵呵,算小的了。
Asprilla 2003-02-08
  • 打赏
  • 举报
回复
灯泡快给我出来......,还有红红星星......
Asprilla 2003-02-07
  • 打赏
  • 举报
回复
谢谢笨小孩和红星星。红星星给我一个在客户端通过xsl进行排序的例子好么。
Asprilla 2003-02-07
  • 打赏
  • 举报
回复
灯泡,其实是这样的,原本用数据库保存的数据不知出于什么原因(这个原因可能与我另外一贴提问的ldap有关,你参与了。)改由XML保存。我也是头次接触纯XML数据源的东西。我考虑用XPath或Xquery(xquery可能还不成熟,不过oracle的jxqi有部分实现)提取元素进行业务逻辑运算后。。。。。。后我就困惑了,这个计算结果我是先保存成XML,还是直接送到前台?直接送到前台的话我用不用形成一个XML的数据流?实际上计算后是给原XML增加了计算节点,并以此节点为依据进行分组。
我说的是不是有点乱。呵呵帮忙分析分析
另外一个问题,保存的数据其实是证券信息。那么1000多只个股信息我是分别保存还是放在一个XML文件中呢,我选择分别保存,我觉得放在一个文件里太大了。
加载更多回复(3)

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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