zoukankan      html  css  js  c++  java
  • 释放VB.NET下Linq to XML的智能提示的威力

    作为忠实的C#粉丝,一向极少使用VB.NET去写代码。C#下几个符号就可以表达的含义,在VB.NET下往往需要好多单词才可以表达(换种角度,这在另外一些人眼中或许也是优点)。也许是C/C++/C#的代码看的太多了,再看VB.NET的代码,总觉得满屏幕堆满了字母,让我有点眼花,找不到代码的重点在哪儿,核心在哪儿。呵呵。

    另外,对于Linq to XML,曾经尝试过,但是似乎没有想象中那么好用。所以在一次开发需要大量操作XML内容的功能时,还是选择经典的DOM方式。

    但,现在,以上对VB.NET和Linq to XML的误解和偏见都有了很大改观,以致,最近又需要操作海量XML文档的时候,发现我只能用C#去实现而有些挠头。什么促使我有这么大的改变?广告之后,再见分晓。

    ---------------------------------为广告而生的分隔线---------------------------------

    最近利用一切可以使用VS2010RC的机会使用它,发现真的比VS2008又有不少的进步,而且运行速度比beta2快多了。真希望我们可以快点把开发工具升级到VS2010,要是Framework版本也能升级到4.0就更好了。

    终结者可以见证正式版的发布,而我,还是继续在魔兽世界里迷醉吧

    ---------------------------------随广告而亡的分隔线---------------------------------

    广告之后,欢迎回来。相信大部分朋友们已经猜到答案了。因为我在标题中已经说明了这篇博文中的三个要素,其中“VB.NET”和“Linq to XML”已经在问题中提出来了,那答案自然就是“智能提示”了?没错。就是“智能提示”。

    作为微软娇生惯养下的程序员,VS强大的智能提示既有功劳又有苦劳,甚至,在我面试个别初级程序员的时候,他们没有VS简直没法活,一行代码都写不出来(包括控制台的Hello World程序),其实我也差不多,离开VS基本上也只剩下半条命。话说回来,作为实际开发工作,如果有某种办法和工具可以提高开发效率和质量,为何要抱着记事本显示自己是高手呢?当然,无论如何,该掌握的东西还是必须要记住的。扯远了,不想引起争论。下面说说具体的做法吧,其中省去在黑暗中摸索的时间和过程。

    首先看看在VB.NET中声明Linq to XML的XElement元素的语法,是难得的比C#看起来更简洁的语法:

    Dim accountNumber As String = "510087321"
    Dim meterNumber As String = "100003680"
    Dim clientDetail As XElement = _
     <ClientDetail>
    	 <AccountNumber><%= accountNumber %></AccountNumber>
    	 <MeterNumber><%= meterNumber %></MeterNumber>
    	 <ClientID>478</ClientID>
     </ClientDetail>

    那么,如果我需要访问以上ClientDetail元素的ClientID子元素的内容“478”该怎么做呢?可以使用一下语法:

    Dim clientID As String = clientDetail.<ClientID>.Value

    当我书写以上代码获取ClientID的值的时候,VS并没有为我提供有用的智能提示,那么如何才可以得到有用的智能提示呢?其关键在于,我们需要向(笼统地说)VS/VB.NET提供我们将要读写的XML文档的架构定义信息,即后缀名为xsd的架构定义文件,将它包含进我们的项目,并在代码文件中导入它,然后在我们创建XElement的时候,定义好用到的架构。然后VS可以识别并开始为我们提供需要的智能提示。说到这里,已经完整的概述了所有需要的步骤。作为某些教编程的老师来说,大概可以下课了。但是,我会说的更详细一点,请继续看下去,下面会更图文并茂一些。

    • 将架构文件包含进项目中

    首先我们需要得到针对我们需要读写的XML文档的架构定义文件,其后缀名为“.xsd”,我们自己定义的好说,对于一些公共的,往往他们的namespace本身就是获取xsd文件的地方。比如http://schemas.xmlsoap.org/soap/envelope/,我就可以把它扔到浏览器的地址栏,然后猛击回车,就可以看到架构定义内容,然后另存成xsd文件就行了。当然这招并非屡试不爽(To:终结者,就是这招并不总是有效的意思)。

    有了xsd文件,我们只需要把它添加到我们的项目中,比如我就建了一个“Schema”文件夹(文件名和文件夹名应该是可以随便根据需要起的),然后把用到的xsd文件放进去,并添加到项目中,就像下面的截图一样:

    image

    • 在代码文件中引入和使用架构

    首先,我们需要在代码文件中导入需要用到的架构定义,导入的方法和导入命名空间类似,如截图中所示:

    image

    其中命名空间的URI就是xsd文件中的“targetNamespace”属性所指定的值:

    image

    • 创建和使用XElement时带上我们的架构

    如下面的代码所示:

    image

    以上代码获取了从Web服务中得到的RateReply元素,在我们获取它时,同时指定了其需要遵循的架构定义(或者说namespace)是“http://fedex.com/ws/rate/v8”。

    在我们经过以上的努力之后,在我们继续操作rootElement变量的时候,VS就可以为我们提供准确的智能提示了:

    image

    准确的智能提示,多一分则多,少一分则少。酷……

    文末点睛之笔:

    可惜C#似乎无法提供这样的能力。呵呵,所以说每一种语言都有其优缺点,都有擅长的出彩的一面和被人诟病的奚落的一面。(糟糕,点睛点到地上了……)

  • 相关阅读:
    A/B test模块使用以及配置
    Linux下的tar压缩解压缩命令详解
    php mysql转义特殊字符的函数(转)
    cas server + cas client 单点登录 原理介绍
    php二维码的生产以及下载
    shiro 获取已经登录的用户
    Sql 根据多条件查询重复的数据 MySQL删除重复数据
    js base64 转PDF并下载,js baser64转图片并下载
    当同时安装Python2和Python3后,如何兼容并切换使用详解(比如pip使用)
    我的博客初始“话”
  • 原文地址:https://www.cnblogs.com/Ricky81317/p/1709669.html
Copyright © 2011-2022 走看看