软件频道>程序开发>JavaVBVCDelphiC/C++Web开发微软专栏移动数据库程序人生软件工程|开发客
您现在的位置: 天极网 > 开发频道 > 使用linq to xml 快速创建自己的Rss
全文

使用linq to xml 快速创建自己的Rss

2008-05-26 15:24作者:半途的Blog出处:天极网责任编辑:dizzarz

  首先引用网络上不知道是谁的一段文字来讲述下什么是linq to xml 如果已经熟悉的就直接跳过这段:

  LINQ to XML 是一种启用了 LINQ 的内存 XML 编程接口,使用它,可以在 .NET Framework 编程语言中处理 XML。

  它将 XML 文档置于内存中,这一点很像文档对象模型 (DOM)。 您可以查询和修改 XML 文档,修改之后,可以将其另存为文件,也可以将其序列化然后通过网络发送。 但是,LINQ to XML 与 DOM 不同: 它提供一种新的对象模型,这是一种更轻量的模型,使用也更方便,这种模型利用了 Visual C# 2008 在语言方面的改进。

  LINQ to XML 最重要的优势是它与 Language-Integrated Query (LINQ) 的集成。 由于实现了这一集成,因此,可以对内存 XML 文档编写查询,以检索元素和属性的集合。 LINQ to XML 的查询功能在功能上(尽管不是在语法上)与 XPath 和 XQuery 具有可比性。 Visual C# 2008 集成 LINQ 后,可提供更强的类型化功能、编译时检查和改进的调试器支持。

  通过将查询结果用作 XElement 和 XAttribute 对象构造函数的参数,实现了一种功能强大的创建 XML 树的方法。 这种方法称为“函数构造”,利用这种方法,开发人员可以方便地将 XML 树从一种形状转换为另一种形状。

  LINQ to XML 提供了改进的 XML 编程接口,这一点可能与 LINQ to XML 的 LINQ 功能同样重要。 通过 LINQ to XML,对 XML 编程时,您可以实现任何预期的操作,包括:

  ·   从文件或流加载 XML。

  ·   将 XML 序列化为文件或流。

  ·   使用函数构造从头开始创建 XML。

  ·   使用类似 XPath 的轴查询 XML。

  ·   使用 Add、Remove、ReplaceWith 和 SetValue 等方法对内存 XML 树进行操作。

  ·   使用 XSD 验证 XML 树。

  ·   使用这些功能的组合,可将 XML 树从一种形状转换为另一种形状。

  好了,我开始废话,首先说一下呢,我技术平平,写出来的文章自然也是不怎么高水平的,但是都是我自己实际项目中总结出来的。

  错误之处还请大家指正,转载的朋友请注明出处:『半途』

  现在言归正传说我们的正题

  首先我们创建一个新窗体,这里以我的网站为例,我们起名叫Rss.aspx

  创建完成后,如果Rss数据源是XML实际文档,就跳过下面一步,如果Rss数据源是aspx文件

  请在创建完新页面后切换到源视图

  保留这一行:


<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Rss.aspx.cs" Inherits="Rss" %> 
  其余的html代码全部删除

  然后在cs里创建方法createRss()

  具体看代码和注释:

 


 public void createRss()
  {
  //首先从数据库里读出所需要的数据
  XXXXContext bd = new XXXXContext();
  var sq = from p in bd.news orderby p.ID descending select new { p.ID, p.title,p.cont, p.in_date,p.n_type };
  //开始创建xml 对于Rss的规范我这里不再啰嗦了,不明白的可以去网上查一下
  //下面这一部分为xml里的声明部分,从foreach开始循环item,把sq的数据循环写入xml
  XElement contacts = new XElement("rss", new XAttribute("version", "2.0"),
  new XElement("channel",
  new XElement("title", "半途的Rss"),
  new XElement("link", "http://www.bantool.cn"),
  new XElement("description", "C#,linq,vs2008"),
  new XElement("language", "zh_cn"),
  new XElement("copyright", "Copyright 2008 bantool"),
  new XElement("webMaster", "ziie@tom.com")));
  //这里开始循环写数据
  foreach (var p in sq)
  {
  contacts.Element("channel").Add(new XElement("item",
  new XElement("title", p.title),
  new XElement("link", "http://www.bantool.cn/news" + p.ID + ".bantool"),
  new XElement("description", p.cont),
  new XElement("category", p.n_type),
  new XElement("pubDate", p.in_date)));
  }
  //这里开始操作xml是写入具体的xml文件还是直接输出
  //如果是写入文件的话用这个
  //contacts.Save("文件路径");
  //如果是输出的諙,
  //先设好输出的类型"text/xml"
  Response.ContentType = "text/xml";
  using (XmlWriter writer = new XmlTextWriter(Response.OutputStream, Encoding.UTF8))
  //用contacts的WriteTo方法来写
  contacts.WriteTo(writer);
  //这样就OK啦
  }
  好了,这个样子就完成了,看我们的linq多么强大!呵呵

  如果有错误还请大家指正,不明白的地方请提出来大家讨论

  演示地址:http://www.bantool.cn/Rss.aspx

  文章来源:http://www.bantool.cn/news33.bantool

相关搜索:
关注此文读者还看过
文章排行
本周
本月
最近更新
关于我们|About us|网站律师|天极服务|电子杂志|RSS订阅|加入我们|网站地图
TMG
Copyright (C) 1999-2009 Chinabyte.com, All Rights Reserved 版权所有 天极网络
商务联系、网站内容、合作建议:010-82657868
版权声明 在线提交意见反馈 渝ICP证B2-20030003号
经营性网站备案信息 网警备案 中国网站排名
天极传媒:天极网|比特网|IT专家网|IT商网|52PK游戏网|IT分众