使用LINQ to XML
2007-12-12 09:58
501 查看
***************图书推荐*************************************************************************************
*********************************************************************************************************************
来源:分享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
|
|
|
|
|
|
来源:分享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
相关文章推荐
- Linq To Xml 备忘录1(XDocument, XElement的使用)
- c#中使用linq to xml 访问 xml文件
- [代码]使用函数构造创建具有属性的元素(LINQ to XML)
- 使用Linq to XML操作XML的属性
- [导入]使用linq to xml 快速创建自己的Rss
- 使用linq to xml修改app.config示例(linq读取xml)
- Linq to Oracle 使用教程(五)使用 Xml 映射文件
- 使用Linq to XML 修改app.config
- 使用linq to xml 快速创建自己的Rss
- [代码]使用函数构造创建XML树(LINQ to XML)
- Linq To Xml 之XDocument, XElement的使用
- 使用linq to xml 怎么减小内存消耗
- 使用LinqToXML增删
- C#使用Linq To XML读取XML,Linq生成XML,Linq创建带属性或带节点XML
- Linq To Xml 备忘录2(X* 类的使用)
- [代码]使用XSD验证XML示例(LINQ to XML)(转)
- C#使用linq to xml完成对XML文件的创建、增加、删除、修改、查询
- 在.net framework 2 中使用linq to xml
- 使用Dom与Linq to Xml
- 使用Linq to xml 动态创建Xml文件(数据来自数据库)