您的位置:首页 > 其它

使用LINQ to XML

2007-12-12 09:58 501 查看
***************图书推荐*************************************************************************************




21.7 元



26.9 元



38.3 元



23.9 元



71.3 元



16.6 元
*********************************************************************************************************************

来源:分享VB,畅“享”VB http://blog.joycode.com/vbcti/archive/2007/12/11/112501.aspx

[原文作者]:Beth Massi
[原文链接]:Getting Started with LINQ to XML
[align=left] [/align]
[align=left]正如Rob所指出的(实际上,我今天在Dev Center上看到了他的帖子),这里有一些关于Visual Studio 2008的教程视频。其中一个就是关于LINQ to XML的概览(不过很抱歉,我并不能给出该视频的直接的链接,因为它被掩盖在精巧的Silverlight控件之下,滚动下视频自己找找吧) Chris Pels 给出了一个很好的XML programming介绍,但仍有两点个人非常喜欢的地方遗漏掉了(他们是内嵌表达式XML智能感知)。这两个特性也非常易于使用。所以,请先看视频然后再回来,我将带你们浏览下面的内容。[/align]
[align=left] [/align]
[align=left]内嵌表达式(Embedded Expression[/align]
[align=left]这里,我们通过直接复制XML文本,创建一个XDocument对象[/align]
[align=left]Dim contactlist1 = <?xml version="1.0" encoding="utf-8"?>[/align]
[align=left] <contacts>[/align]
[align=left] <contact>[/align]
[align=left] <lastname>Davolio</lastname>[/align]
[align=left] <firstname>Nancy</firstname>[/align]
[align=left] <state>WA</state>[/align]
[align=left] <phone>(206) 555-9857</phone>[/align]
[align=left] </contact>[/align]
[align=left] <contact>[/align]
[align=left] <lastname>Buchanan</lastname>[/align]
[align=left] <firstname>Steven</firstname>[/align]
[align=left] <state>CA</state>[/align]
[align=left] <phone>(925) 555-4848</phone>[/align]
[align=left] </contact>[/align]
[align=left] <contact>[/align]
[align=left] <lastname>Suyama</lastname>[/align]
[align=left] <firstname>Michael</firstname>[/align]
[align=left] <state>CA</state>[/align]
[align=left] <phone>(925) 555-7773</phone>[/align]
[align=left] </contact>[/align]
[align=left] <contact>[/align]
[align=left] <lastname>Callahan</lastname>[/align]
[align=left] <firstname>Laura</firstname>[/align]
[align=left] <state>WA</state>[/align]
[align=left] <phone>(206) 555-1189</phone>[/align]
[align=left] </contact>[/align]
[align=left] </contacts>[/align]
有趣的是,你可以通过<%=%>创建内嵌表达式,并且任何VB代码都可以放在这里。下面的一个例子将把现在时间放在lastUpdated的属性里
[align=left]Dim contactlist2 = <?xml version="1.0" encoding="utf-8"?>[/align]
[align=left] <contacts lastUpdated=<%= Now() %>>[/align]
[align=left]...[/align]
[align=left] </contacts>[/align]
内嵌表达式有各种各样的使用方式。你还可以通过内嵌LINQ查询(比如LINQ to SQL)来创建一个XML对象。下面的例子将展示如何将Employee表中的雇员信息查询出来并建立一个XDocument对象
[align=left]Dim contactlist3 = <?xmlversion="1.0"?>[/align]
[align=left] <contacts>[/align]
[align=left] <%=From employee In db.Employees _[/align]
[align=left] Select<contact>[/align]
[align=left] <lastname><%= employee.LastName %></lastname>[/align]
[align=left] <firstname><%= employee.FirstName %></firstname>[/align]
[align=left] <state><%= employee.Region %></state>[/align]
[align=left] <phone><%= employee.HomePhone %></phone>[/align]
[align=left] </contact>%>[/align]
[align=left] </contacts>[/align]
但真正让我最为喜爱的是,实际上你可以很容易的将任何XML片断改造成为内嵌LINQ to XML片断。我们因此再也不需要XSLT了!(感谢上帝,因为每一次我回顾我的模板以及样式表时,都需要花费我打量时间来回忆这到底在写些什么。我讨厌XSLT,因为他们并不直观,至少对我来说是)

然而,在VB中,转型却非常直观。因为逻辑上他们是自上而下的,而且没有任何需要记忆API调用。下面的示例,展示我们可以通过改写上面的contactlist1(or contactlist3)来建立不同的XML文档。让我们看看如果我只想要California contacts 的情况:
[align=left]Dim contactlist4 = <?xml version="1.0" encoding="utf-8"?>[/align]
[align=left] <contacts>[/align]
[align=left] <%= From contact In contactlist1...<contact> _[/align]
[align=left] Where contact.<state>.Value = "CA" _[/align]
[align=left] Select contact %>[/align]
[align=left] </contacts>[/align]
这将生成如下的XML文档:
[align=left]<?xml version="1.0" encoding="utf-8"?>[/align]
[align=left]<contacts>[/align]
[align=left] <contact>[/align]
[align=left] <lastname>Buchanan</lastname>[/align]
[align=left] <firstname>Steven</firstname>[/align]
[align=left] <state>CA</state>[/align]
[align=left] <phone>(925) 555-4848</phone>[/align]
[align=left] </contact>[/align]
[align=left] <contact>[/align]
[align=left] <lastname>Suyama</lastname>[/align]
[align=left] <firstname>Michael</firstname>[/align]
[align=left] <state>CA</state>[/align]
[align=left] <phone>(925) 555-7773</phone>[/align]
[align=left] </contact>[/align]
[align=left]</contacts>[/align]
或者我们可以将其改为一种新的结构:

[align=left]Dim contactlist5 = <?xml version="1.0" encoding="utf-8"?>[/align]
[align=left] <employees>[/align]
[align=left] <%= From contact In contactlist1...<contact> _[/align]
[align=left] Where contact.<state>.Value = "CA" _[/align]
[align=left] Select <employee>[/align]
[align=left] <%= contact.<lastname> %>[/align]
[align=left] <%= contact.<firstname> %>[/align]
[align=left] <region><%= contact.<state>.Value %></region>[/align]
[align=left] </employee> %>[/align]
[align=left] </employees>[/align]
这将生成如下的XML文档:
[align=left]<?xml version="1.0" encoding="utf-8"?>[/align]
[align=left]<employees>[/align]
[align=left] <employee>[/align]
[align=left] <lastname>Buchanan</lastname>[/align]
[align=left] <firstname>Steven</firstname>[/align]
[align=left] <region>CA</region>[/align]
[align=left] </employee>[/align]
[align=left] <employee>[/align]
[align=left] <lastname>Suyama</lastname>[/align]
[align=left] <firstname>Michael</firstname>[/align]
[align=left] <region>CA</region>[/align]
[align=left] </employee>[/align]
[align=left]</employees>[/align]
你甚至可以选取片断并做任何你想要的事情,或者合并他们。一个片断就是一个XElement
[align=left]Dim contactlist6 = <contacts>[/align]
[align=left] <contact>[/align]
[align=left] <lastname>Massi</lastname>[/align]
[align=left] <firstname>Beth</firstname>[/align]
[align=left] <state>CA</state>[/align]
[align=left] <phone>(925) 555-1212</phone>[/align]
[align=left] </contact>[/align]
[align=left] </contacts>[/align]
我们可以很容易的将其并如其它片断中,如:
[align=left]Dim contactlist7 = <CApeople>[/align]
[align=left] <contacts>[/align]
[align=left] <%= From contact In contactlist1...<contact> _[/align]
[align=left] Where contact.<state>.Value = "CA" _[/align]
[align=left] Select contact %>[/align]
[align=left] </contacts>[/align]
[align=left] <beth>[/align]
[align=left] <%= From beth In contactlist6...<contact> _[/align]
[align=left] Select beth.<lastname> %>[/align]
[align=left] </beth>[/align]
[align=left] </CApeople>[/align]
[align=left]其结果如下:[/align]
[align=left]<CApeople>[/align]
[align=left] <contacts>[/align]
[align=left] <contact>[/align]
[align=left] <lastname>Buchanan</lastname>[/align]
[align=left] <firstname>Steven</firstname>[/align]
[align=left] <state>CA</state>[/align]
[align=left] <phone>(925) 555-4848</phone>[/align]
[align=left] </contact>[/align]
[align=left] <contact>[/align]
[align=left] <lastname>Suyama</lastname>[/align]
[align=left] <firstname>Michael</firstname>[/align]
[align=left] <state>CA</state>[/align]
[align=left] <phone>(925) 555-7773</phone>[/align]
[align=left] </contact>[/align]
[align=left] </contacts>[/align]
[align=left] <beth>[/align]
[align=left] <lastname>Massi</lastname>[/align]
[align=left] </beth>[/align]
[align=left]</CApeople>[/align]
[align=left] [/align]
好了,我想你可能会想,“这太神奇了!”(至少我希望如此)。但是别急,还有更多!

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: