释放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#似乎无法提供这样的能力。呵呵,所以说每一种语言都有其优缺点,都有擅长的出彩的一面和被人诟病的奚落的一面。(糟糕,点睛点到地上了……)

posted on 2010-04-11 18:50  零度的火  阅读(588)  评论(0编辑  收藏  举报

导航