***************图书推荐*************************************************************************************
|
|
|
|
|
|
*********************************************************************************************************************
正如
Rob
所
指出
的(实际上,我今天在
Dev Center
上看到了他的帖子),这里有一些关于
Visual Studio 2008
的
教程视频
。其中一个就是关于
LINQ to XML
的概览(不过很抱歉,我并不能给出该视频的直接的链接,因为它被掩盖在精巧的
Silverlight
控件之下,滚动下视频自己找找吧)
Chris Pels
给出了一个很好的
XML programming
介绍,但仍有两点个人非常喜欢的地方遗漏掉了(他们是
内嵌表达式
和
XML智能感知
)。这两个特性也非常易于使用。所以,请先看视频然后再回来,我将带你们浏览下面的内容。
内嵌表达式(
Embedded Expression
)
这里,我们通过直接复制
XML
文本,创建一个
XDocument
对象
Dim
contactlist1 = <?xml version="1.0" encoding="utf-8"?>
<contacts>
<contact>
<lastname>Davolio</lastname>
<firstname>Nancy</firstname>
<state>WA</state>
<phone>(206) 555-9857</phone>
</contact>
<contact>
<lastname>Buchanan</lastname>
<firstname>Steven</firstname>
<state>CA</state>
<phone>(925) 555-4848</phone>
</contact>
<contact>
<lastname>Suyama</lastname>
<firstname>Michael</firstname>
<state>CA</state>
<phone>(925) 555-7773</phone>
</contact>
<contact>
<lastname>Callahan</lastname>
<firstname>Laura</firstname>
<state>WA</state>
<phone>(206) 555-1189</phone>
</contact>
</contacts>
有趣的是,你可以通过
<%=%>
创建内嵌表达式,并且任何
VB
代码都可以放在这里。下面的一个例子将把现在时间放在
lastUpdated
的属性里
Dim
contactlist2 = <?xml version="1.0" encoding="utf-8"?>
<contacts lastUpdated=<%= Now() %>>
...
</contacts>
内嵌表达式有各种各样的使用方式。你还可以通过内嵌
LINQ
查询(比如
LINQ to SQL
)来创建一个
XML
对象。
下面的例子将展示如何将
Employee
表中的雇员信息查询出来并建立一个
XDocument
对象
Dim
contactlist3 =
<?
xml
version
=
"
1.0
"
?>
<
contacts
>
<%=
From
employee
In
db.Employees _
Select
<
contact
>
<
lastname
>
<%=
employee.LastName
%>
</
lastname
>
<
firstname
>
<%=
employee.FirstName
%>
</
firstname
>
<
state
>
<%=
employee.Region
%>
</
state
>
<
phone
>
<%=
employee.HomePhone
%>
</
phone
>
</
contact
>
%>
</
contacts
>
但真正让我最为喜爱的是,实际上你可以很容易的将任何
XML
片断改造成为内嵌
LINQ to XML
片断。我们因此再也不需要
XSLT
了!(感谢上帝,因为每一次我回顾我的模板以及样式表时,都需要花费我打量时间来回忆这到底在写些什么。我讨厌
XSLT
,因为他们并不直观,至少对我来说是)
然而,在
VB
中,转型却非常直观。因为逻辑上他们是自上而下的,而且没有任何需要记忆
API
调用。下面的示例,展示我们可以通过改写上面的
contactlist1(or contactlist3)
来建立不同的
XML
文档。让我们看看如果我只想要
California contacts
的情况:
Dim
contactlist4 = <?xml version="1.0" encoding="utf-8"?>
<contacts>
<%= From contact In contactlist1...<contact> _
Where contact.<state>.Value = "CA" _
Select contact %>
</contacts>
这将生成如下的
XML
文档:
<?xml version="1.0" encoding="utf-8"?>
<contacts>
<contact>
<lastname>Buchanan</lastname>
<firstname>Steven</firstname>
<state>CA</state>
<phone>(925) 555-4848</phone>
</contact>
<contact>
<lastname>Suyama</lastname>
<firstname>Michael</firstname>
<state>CA</state>
<phone>(925) 555-7773</phone>
</contact>
</contacts>
或者我们可以将其改为一种新的结构:
Dim
contactlist5 = <?xml version="1.0" encoding="utf-8"?>
<employees>
<%= From contact In contactlist1...<contact> _
Where contact.<state>.Value = "CA" _
Select <employee>
<%= contact.<lastname> %>
<%= contact.<firstname> %>
<region><%= contact.<state>.Value %></region>
</employee> %>
</employees>
这将生成如下的
XML
文档:
<?xml version="1.0" encoding="utf-8"?>
<employees>
<employee>
<lastname>Buchanan</lastname>
<firstname>Steven</firstname>
<region>CA</region>
</employee>
<employee>
<lastname>Suyama</lastname>
<firstname>Michael</firstname>
<region>CA</region>
</employee>
</employees>
你甚至可以选取片断并做任何你想要的事情,或者合并他们。一个片断就是一个
XElement
Dim
contactlist6 = <contacts>
<contact>
<lastname>Massi</lastname>
<firstname>Beth</firstname>
<state>CA</state>
<phone>(925) 555-1212</phone>
</contact>
</contacts>
我们可以很容易的将其并如其它片断中,如:
Dim
contactlist7 = <CApeople>
<contacts>
<%= From contact In contactlist1...<contact> _
Where contact.<state>.Value = "CA" _
Select contact %>
</contacts>
<beth>
<%= From beth In contactlist6...<contact> _
Select beth.<lastname> %>
</beth>
</CApeople>
其结果如下:
<CApeople>
<contacts>
<contact>
<lastname>Buchanan</lastname>
<firstname>Steven</firstname>
<state>CA</state>
<phone>(925) 555-4848</phone>
</contact>
<contact>
<lastname>Suyama</lastname>
<firstname>Michael</firstname>
<state>CA</state>
<phone>(925) 555-7773</phone>
</contact>
</contacts>
<beth>
<lastname>Massi</lastname>
</beth>
</CApeople>
好了,我想你可能会想,“这太神奇了!”(至少我希望如此)。但是别急,还有更多!
XML
智能感知(XML IntelliSense
)
如果没有了智能感知
Visual Basic
将会怎么?即使是
XML
,在
VB
中仍旧可以提供智能感知,但是无论如何,你不得不事先告诉
VB
,你正在处理的
XML
数据的
Schema
。要这样做,你只需将你的
XML
文档添加到项目中,然后在
XML
菜单中选择“
Create Schema”.
这将通过推测
Schema
,生成一个
XSD
文件。然后你需要找到这个文件,然后将其添加到你的项目中。这个
灵巧的小工具叫
XML to Schema Tool
,你可以下载并装入一个叫做
”XML to Schema”
的
New Item
模版。这样可以让这一切更简便些。它可以从网页中的
XML
资源,粘贴下来的
xml
文本,或者磁盘中的
xml
文件中推测
schema
,然后自动将生成的
XSD
文件添加至你的项目中,这一切只需要一步操作。
现在我们的得到了
schema
,我们可以
XML
中,键入代码来得到智能感知的帮助了
:
Visual Basic
还可以通过在代码顶部添加
Imports
语句,来处理
XML
命名空间。这样你可以在一个项目中处理多个命名空间。
好了,
到这里
我希望已经给了你们一个关于
VB
中
XML
的很好的介绍。关于这个新语言特性,真的有太多的事情可以做了,所以并没能将他们一一的列写出来。期待着推出更多的教程视频
Enjoy
,
-B