我的个人网站上有一个页面,主要介绍了一些我喜欢的书籍,目前有9本,这样把页面拉的很长,挺影响美观的,于是决定分页显示它们。我没有SQL数据库,而且我也不想用复杂的数据库来存放这种简单的数据,所以我用的是XML文件,把它读入DataSet,然后再在Repeater中显示。

如果是SQL数据库或Access等,分页到是挺简单的,但是我存放数据的是XML文件,又不能用SQL语句,怎么办呢?问了一个高手,知道了还有一种叫XPath的语言,又学到一些东西了,不敢偷懒,马上记下。

//首先尝试从缓存中读取
XmlDataDocument doc = SiteCache.Get("Doc") as XmlDataDocument;
DataSet ds = SiteCache.Get("Books") as DataSet;
if(doc == null && ds == null) {
    string path;
    if(HttpContext.Current != null)
        path = HttpContext.Current.Server.MapPath("~/Content/Books.xml");
    else
        path = Directory.GetCurrentDirectory() + Path.DirectorySeparatorChar + "Content/Books.xml";

    ds = new DataSet();
    ds.ReadXml(path);
    
    doc = new XmlDataDocument(ds);
    SiteCache.Max("Doc", doc, new System.Web.Caching.CacheDependency(path));
    SiteCache.Max("Books", ds, new System.Web.Caching.CacheDependency(path));
}

//总数据项为DataRow的个数
pager.TotalRecords = ds.Tables[0].Rows.Count;
int current = pager.PageIndex * pager.PageSize;
int target = current + pager.PageSize;

string xpath = String.Format("/Books/Book[position()>{0} and position()<={1}]", current, target);

XmlNodeList nodes = doc.DocumentElement.SelectNodes(xpath);
DataRow row = null;
DataSet ds2 = ds.Clone();
ds2.Clear();
foreach(XmlNode node in nodes) {
    row = doc.GetRowFromElement((XmlElement)node);
    //ds2.Tables[0].Rows.Add(row); 不能用这样的语句,否则会抛异常
    ds2.Tables[0].ImportRow(row);
}
books.DataSource = ds2;
books.DataBind();

上面的代码中,pager是一个分页控件,books是一个Repeater,用XPath选择要读取的节点,把它赋值到一个DataRow中,然后将之导入DataTable中,再绑定到Repeater上,就可以显示了。这里遇到个小问题,不能用ds2.Tables[0].Rows.Add(row);这个语句,否则会抛个“此DataRow已属于另一个DataTable”的异常,不知为什么,改为ImportRow就没问题了。希望哪位高手知道,请告诉我一声,谢谢。

http://chengbo.net/books.aspx

XML数据的分页显示相关推荐

  1. jsp:使用jsp完成数据的分页显示

    一,使用jsp将数据库内的数据.分页显示到页面 1,创建一个servelt处理后台数据,和数据库的数据 private static final long serUid=1L;//加载驱动static ...

  2. 应用displaytag完成大数据量分页显示的例子

    应用displaytag在struts中完成大数据量分页显示,Oracle数据库 JSP文件: <%...@ taglib uri="/WEB-INF/displaytag.tld&q ...

  3. 使用JS动态生成表格数据和分页显示

    根据录入的内容动态显示到页面,不需要通过数据库保存,这样子减轻服务器压力.同时如果数据过多,支持分页显示,这些数据到保存时可以一起提交到后台. 效果如下: js代码(要引入JQuery): <! ...

  4. layui分页只能显示一页数据_分页显示查询数据

    ​查询数据后,将数据分页显示 一.前台页面 Title 查询 顺序号 ID 标题 时间 二.后台代码 protected void Page_Load(object sender, EventArgs ...

  5. 网页数据分页显示php,PHP网页设计例子:用PHP3完成MySQL数据的分页显示

    马上注册,结交更多好友,享用更多功能,让你轻松玩转社区. 您需要 登录 才可以下载或查看,没有帐号?立即注册 x 会MYSQL吗?会,我会把我的信息在数据库里插入删除啦mysql|分页|数据|显示  ...

  6. Vue数据格式化:JSON、HTML、XML数据的格式化显示

    介绍 数据格式化编辑器: 方便你实现在线的数据格式化编辑与显示的工具.支持的数据格式包括:JSON.HTML.XML 源码工程地址:vue_data_editor 效果图 安装 由于源码未创建npm包 ...

  7. Flask+MySQL大数据表格分页显示

    1.显示效果 界面主要由两部分完成 顶部搜索栏:按条件传参给后端请求,控制表格数据重载刷新 底部表格:接收后端返回JSON数据,对表格渲染显示 2.前端传参 前端采用Layui框架渲染,对页码和条数传 ...

  8. 数据查询分页显示的优化方法

    现有方法: 开始时间 [@start_dt ]   结束时间 [@end_dt ] 其它条件 [      ] 查询数据总量:[XXXX] 1 2 3 4 5 6 7 8 9 10 11 12 13 ...

  9. 浅谈AJAX并实现使用pagehelper-5.1.10.jar分页插件实现异步从数据库中获取数据分页显示

    AJAX异步请求 什么是ajax 异步 JavaScript 同步和异步的区别 同步方式:正常情况下,浏览器与服务器之间是串行操作,类似于一个Java线程的操作. 异步方式:浏览器与服务器是并行操作, ...

最新文章

  1. [Windows编程] 获取系统CPU 个数
  2. Spark Java API:Transformation
  3. java断言——Assertion
  4. Linux下没有包含头文件(不知是哪个)导致编译无法通过的解决心得
  5. 哲学家就餐问题(如何避免死锁)(多线程版)
  6. 前端学习(3260):js高级教程(4)instanceof
  7. 集成学习voting Classifier在sklearn中的实现
  8. python-day1-03-格式化输出
  9. JAVA调用 keras,在TensorFlow(Python, Java)环境下使用Keras模型
  10. 数据结构-----环形链表
  11. (转)以C++为核心语言的高频交易系统的讨论?
  12. 2020年全国大学生数学建模竞赛优秀论文
  13. Excel怎么隐藏指定文本单元格整行
  14. ARRL在线电台日记(LOTW)申请
  15. html5微信拍照后自动刷新,微信内置浏览器物理返回不刷新问题
  16. krpano 运算符
  17. Python实现自动完成打字测试
  18. win7 android usb驱动,在win7系统下安装手机usb驱动软件的教程
  19. MyBatis02:CRUD 操作
  20. 当你的工作==你热爱的事情,是一种什么体验?

热门文章

  1. python生成100个随机数_Python_0——100闭区间产生3个随机数,两种方法排序
  2. Matlab的不同进制转换
  3. numpy.random.uniform()
  4. 详解tf.nn.dropout
  5. html5日期不联动下拉框,下拉框联动问题 赋值时候失效
  6. oracle脱机备份文件拒绝访问,如何解决备份文件夹拒绝访问问题
  7. python怎么将输入的数字变成列表_Python键盘输入转换为列表的实例
  8. 通过webpack配置vue项目页面title
  9. Faster R-CNN论文笔记——FR
  10. Hello World With JBoss Modules