【VS技巧】根据XML自动生成类型
.NET 4.5对应的VS版本(不要问我哪个版本)中新增了一个功能,严重实用,可以根据XML文档生成新类型。这个功能在VS的【编辑】>【选择性粘贴】菜单中。怎么玩?不急,咱们实际操作一下。
以网易新闻中心的RSS源为例,URI必须指向XML文档,我选用了“文化资讯”频道的内容来测试,URI如下:
http://book.163.com/special/0092451H/rss_whzx.xml
在浏览器地址栏中输入以上URI,然后打开该RSS源,然后查看源。按全选选中整个XML文档。
然后回到VS项目(注意要先建一个项目),可以新建一个代码文件,然后把鼠标光标定位到要插入新class的地方,然后依次执行菜单【编辑】>【选择性粘贴】>【将XML粘贴为类】。
然后,我们会看到神奇一幕发生。生成的代码如下:
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)]
[System.Xml.Serialization.XmlRootAttribute(Namespace = "", IsNullable = false)]
public partial class rss
{ ……/// <remarks/>
public rssChannel channel
{
get
{
return this.channelField;
}
set
{
this.channelField = value;
}
} /// <remarks/>
[System.Xml.Serialization.XmlAttributeAttribute()]
public decimal version
{
get
{
return this.versionField;
}
set
{
this.versionField = value;
}
}
} /// <remarks/>
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)]
public partial class rssChannel
{ ……/// <remarks/>
public string title
{
get
{
return this.titleField;
}
set
{
this.titleField = value;
}
} /// <remarks/>
public string link
{
get
{
return this.linkField;
}
set
{
this.linkField = value;
}
} ……
} /// <remarks/>
[System.Xml.Serialization.XmlElementAttribute("item")]
public rssChannelItem[] item
{
get
{
return this.itemField;
}
set
{
this.itemField = value;
}
}
} /// <remarks/>
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)]
public partial class rssChannelItem
{ ……/// <remarks/>
public string title
{
get
{
return this.titleField;
}
set
{
this.titleField = value;
}
} ……/// <remarks/>
public string pubDate
{
get
{
return this.pubDateField;
}
set
{
this.pubDateField = value;
}
} /// <remarks/>
public rssChannelItemGuid guid
{
get
{
return this.guidField;
}
set
{
this.guidField = value;
}
}
} /// <remarks/>
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)]
public partial class rssChannelItemGuid
{ private bool isPermaLinkField; private string valueField; /// <remarks/>
[System.Xml.Serialization.XmlAttributeAttribute()]
public bool isPermaLink
{
get
{
return this.isPermaLinkField;
}
set
{
this.isPermaLinkField = value;
}
} /// <remarks/>
[System.Xml.Serialization.XmlTextAttribute()]
public string Value
{
get
{
return this.valueField;
}
set
{
this.valueField = value;
}
}
}
OK,代码都生成了,后面大家知道怎么做了。
这里我举个例子,通过代码在线获得RSS源的XML文档,然后通过XML反序列化来得到一个刚才生成的rss类的实例,然后就像访问其他普通类型一样使用。
static void Main(string[] args)
{
// 设置控制台窗口的缓冲区大小
Console.SetBufferSize(Console.LargestWindowWidth, );
// 获取XML的URI
string uri = "http://book.163.com/special/0092451H/rss_whzx.xml";
WebClient wc = new WebClient();
// 获取RSS内容
byte[] xmlData = wc.DownloadData(uri);
rss wy_rss = null;
using (MemoryStream ms=new MemoryStream(xmlData))
{
// 反序列化
XmlSerializer xs = new XmlSerializer(typeof(rss));
wy_rss = (rss)xs.Deserialize(ms);
}
// 如果反序列化成功,则输出相关内容
if (wy_rss != null)
{
Console.WriteLine("版本:{0}", wy_rss.version);
rssChannel channel = wy_rss.channel;
Console.WriteLine("频道名字:{0}", channel.title);
Console.WriteLine("频道描述:\n{0}\n", channel.description);
Console.WriteLine("========= 资源列表 =========");
foreach (rssChannelItem item in channel.item)
{
Console.WriteLine("标题:{0}", item.title);
Console.WriteLine("描述:{0}", item.description);
Console.WriteLine("链接:{0}", item.link);
Console.WriteLine("发布日期:{0}", item.pubDate);
Console.WriteLine("---------------------------------");
}
}
Console.Read();
}
最后,得到的结果如下图所示。
如何,这个功能实用吧?
【VS技巧】根据XML自动生成类型的更多相关文章
- Eclipse用法和技巧七:自动生成get和set方法2
上一篇文章中我们介绍了自动批量生成get和set函数的方法.这个方法一般在声明完类的数据域之后使用,比较方便快捷.这里再补充几个自动生成get和set函数的方法. 步骤一:在声明的数据域中按Ctrl+ ...
- Eclipse用法和技巧六:自动生成get和set方法1
java的类中,除了常量声明为静态且公有的,一般的对象数据作用域,都是声明为私有的.这样做能保护对象的属性不会被随意改变,调试的时候也会方便很多:在类的公有方法中大一个调用栈就能看到哪里改了属性值.声 ...
- Eclipse用法和技巧三:自动生成Main方法2
上一篇文章里面介绍了新建文件时候自动添加main方法,这里接着介绍自动联想main方法. 步骤一:输入"main” 步骤二:保持光标在上图位置,按ALT + /,再回车 上一篇文 ...
- Eclipse用法和技巧二:自动生成Main方法1
刚开始编写java小程序,基本都要用到main方法.后期开发大一点的程序,也可以用main方法进行单元测试.总是编写main方法,感觉太无聊了,幸好Eclipse可以帮我们自动生成main方法.见图: ...
- 利用Vistual Studio自带的xsd.exe工具,根据XML自动生成XSD
利用Vistual Studio自带的xsd.exe工具,根据XML自动生成XSD 1, 命令提示符-->找到vs自带的xsd.exe工具所在的文件夹 例如: C:\Program Files ...
- 配置generatorConfig.xml自动生成的代码的sql书写问题
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE generatorConfiguratio ...
- [转]使用ant让Android自动打包的build.xml,自动生成签名的apk文件(支持android4.0以上的版本)
在android4.0以后的sdk里那个脚本就失效了,主要是因为 apkbuilder这个程序不见了: 人家sdk升级,我们的脚本也要跟上趟,修改一下喽. 上网一查,大家的文章还停留在我去年的脚本程度 ...
- Eclipse用法和技巧十三:自动生成的TODO注释1
使用eclipse的快捷键自动生成的代码,经常有这样的注释. 一眼看上去这个注释和一般的注释并无什么差别,不过TODO这个字符串的颜色不一样,应该有些内容.TODO是eclipse中提供的一种任务标签 ...
- [Silverlight][linq to sql]不能找到linq to sql自动生成类型
最近在做Silverlight项目,结合使用了WCF RIA service,通过linq to sql自动生成model类型,使用起来非常方便.具体可见linq to sql之silverlight ...
随机推荐
- linq lamada
static void Main(string[] args) { List<Customer> cust = new List<Customer>() { ",Ci ...
- 【转】Backbone使用总结
转自 http://www.pchou.info/javascript/2014/06/26/backbone-summary-01.html 开始在项目中大规模使用backbone,一路磕磕碰碰, ...
- vb- ----之常用函数
[VB]常用函数 2007-10-25 10:52 3375人阅读 评论(1) 收藏 举报 vbstringdateintegervbscriptwindows (一)类型转换类函数1. CType( ...
- RHEL6.5及Win7的和谐共处(投机版)
背景: 在Windows XP存在时,装了个RHEL6.5,用的是安装程序自带的Grub,后来将XP删除后重装了Windows7,RHEL的Grub被覆盖,启动不了RHEL了,于是补上RHEL的引导… ...
- ubuntu12.04网络配置
1.配置/etc/network/interfaces #静态IP地址 auto lo iface lo inet loopback #loopback虚拟网络设备,使TCP/IP能以127.0.0. ...
- Android--短信
1.Android 提供一系列 API,可以是我们在自己的程序中发送和接收短信: 2.接收短信: 1)当手机接收到一条短信时,系统会发出一条值为 android.provider.Telephony. ...
- div在Iframe 被遮挡解决方法
曾经试过在Iframe调试div 未成功 后来从网上看了一个思路 从框架页中调用主框架的js 将所有js方法写到主框架里 //主页方法 function addlframe(url,style) ...
- Apache Marmotta 3.1.0-incubating 发布
Apache Marmotta 3.1.0-incubating 发布了,Apache Marmotta 项目的目的是提供 Linked Data Platform 的开源实现,可让组织轻松的使用.扩 ...
- 一种基于Orleans的分布式Id生成方案
基于Orleans的分布式Id生成方案,因Orleans的单实例.单线程模型,让这种实现变的简单,贴出一种实现,欢迎大家提出意见 public interface ISequenceNoGenerat ...
- GitHub的多人协同开发配置
GitHub For Windows 下载地址:https://windows.github.com/ 基本的注册登录就不细讲了. 在源代码管理上,最重要的就是仓库了.仓库这一概念很容易理解,所谓仓库 ...