使用LINQ to XML

***************图书推荐*************************************************************************************


21.7 元

26.9 元

38.3 元

23.9 元

71.3 元

16.6 元

*********************************************************************************************************************

[ 原文作者 ] Beth Massi
[ 原文链接 ] Getting Started with LINQ to XML
 
正如 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
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值