【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, 1000);
            // 获取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自动生成类型,布布扣,bubuko.com

时间: 2025-01-02 01:37:16

【VS技巧】根据XML自动生成类型的相关文章

通过mybatis工具generatorConfig.xml自动生成实体,DAO,映射文件

简介 Mybatis属于半自动ORM,可以利用mybatis工具generatorConfig.xml自动生成DAO.实体.映射文件的方式来代替手动书写的方式,这样既提高了工作效率也可以在项目避免出现的一些细微难调试的BUG. 前提条件: 1.需要准备的第三方jar包为: mybatis-generator-core-1.3.2.jar和mysql-connector-java-5.1.39-bin.jar, 其中mybatis-generator-core-1.3.2.jar的下载地址为: h

利用Vistual Studio自带的xsd.exe工具,根据XML自动生成XSD

利用Vistual Studio自带的xsd.exe工具,根据XML自动生成XSD 1, 命令提示符-->找到vs自带的xsd.exe工具所在的文件夹 例如: C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin 注意:win7操作系统“命令提示符”要以管理员身份运行 2,将Xml文件拷贝到xsd.exe工具所在的文件夹,生成的xsd文件也将在这个文件夹中 3,在命令提示符中输入 xsd.exe test.xml, 多个xml文件以空格隔

Eclipse用法和技巧七:自动生成get和set方法2

上一篇文章中我们介绍了自动批量生成get和set函数的方法.这个方法一般在声明完类的数据域之后使用,比较方便快捷.这里再补充几个自动生成get和set函数的方法. 步骤一:在声明的数据域中按Ctrl+1: 步骤二:点击最后一个选项Create getter and setter,在弹出的对话框中点击确定: 在介绍另外一个方法: 步骤一:声明完类的数据域之后,输入set,按住Alt+/: 步骤二:同步骤一,输入get,再按住Alt+/: 上一篇文章,Eclipse用法和技巧六:自动生成get和se

Eclipse用法和技巧三:自动生成Main方法2

上一篇文章里面介绍了新建文件时候自动添加main方法,这里接着介绍自动联想main方法.       步骤一:输入"main” 步骤二:保持光标在上图位置,按ALT + /,再回车 上一篇文章,Eclipse用法和技巧二:自动生成Main方法1:                              http://blog.csdn.net/ts1122/article/details/8769361 下一篇文章,Eclipse用法和技巧四:生成说明文档:                  

根据XML自动生成XSD

利用Vistual Studio自带的xsd.exe工具,根据XML自动生成XSD 1, 命令提示符-->找到vs自带的xsd.exe工具所在的文件夹 例如: C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin 注意:win7操作系统"命令提示符"要以管理员身份运行 2,将Xml文件拷贝到xsd.exe工具所在的文件夹,生成的xsd文件也将在这个文件夹中 3,在命令提示符中输入 xsd.exe test.xml, 多个x

Eclipse用法和技巧十三:自动生成的TODO注释1

使用eclipse的快捷键自动生成的代码,经常有这样的注释. 一眼看上去这个注释和一般的注释并无什么差别,不过TODO这个字符串的颜色不一样,应该有些内容.TODO是eclipse中提供的一种任务标签,用来标记一些待做的事情.先去看下eclipse中的标签:        步骤一:WINDOW->preference->java->complier->task tags 可以看到这些标签可以由用户自己配置,可以有三种优先级:高,一般,低.对话框的下面还有一个标签是否大小写敏感,默认

[转]使用ant让Android自动打包的build.xml,自动生成签名的apk文件(支持android4.0以上的版本)

在android4.0以后的sdk里那个脚本就失效了,主要是因为 apkbuilder这个程序不见了: 人家sdk升级,我们的脚本也要跟上趟,修改一下喽. 上网一查,大家的文章还停留在我去年的脚本程度,算了,自己动手查阅了资料之后,具体实现如下: 在工程的根目录 创建2个文件,分别: 1.build.xml 2.build.properties build.xml的内容: [java] view plaincopyprint? <?xml version="1.0" encodi

从XML自动生成DataTable

假如已经有如下的XML字符: 通过使用DataSet自带的ReadXML()方法,可以自动生成3个DataTables,其中两个的名字及数据如下: 还有一个名为storeCodeOutlets的DataTable,但是没有数据.主要代码如下: using (System.IO.StringReader reader = new System.IO.StringReader(xmlString)) { ds.ReadXml(reader); }

Java - Test - TestNG: Idea 引入 testng.xml 自动生成插件

1. 概述 Idea 引入自动生成 testng.xml 插件 自动生成 testng.xml 2. 背景 testng 调试 调试 testng, 主要是这两种方法 ide 下直接执行测试 方法 类 ide 下执行 testng.xml testng.xml 概述 测试套件 的配置文件 问题 每次都要手写, 会比较麻烦 解决方案 备份一个, 每次按格式改 使用插件自动创建 写个程序自动生成 xml 感觉 方案2 是最方便的 3. 环境 ide idea 2018.2 4. 步骤 安装插件: C