基于Visual Studio2010讲解C#4.0语法(2)--使用XQuery引擎操作XML文档

目前,市面上的XML数据库,尤其是源生XML数据库(Native XML Database)如Ipedo XML Database、Software AG Tamino Server、Berkeley XML Database都提供了XQuery支持,用于查询存储在XML数据库中的XML片断或者XML节点。甚至Ipedo XML数据库还提供了XQuery Update功能,用于更新XML文档内容。下图是这类XQuery引擎的例示图。

 

 


这类XQuery引擎内嵌在XML数据库中,实现方面需要考虑内部存储的特性,如使用的数据结构、存储的XML Meta信息等。在查询优化方面需要考虑索引(Index)的使用,使用不使用索引以及使用哪一个索引。

下面我们来看下这方面的实例:

 首先打开Visual Studio2010创建一个基于C#的ConsoleApplication工程XQuery:

 

创建成功进入工程后,首先我们在工程项目下创建一个Data文件夹向其中添加一个bib.xml文件如下图所示:

然后打开bib.xml加入下列代码:

TCP/IP Illustrated Stevens W. Addison-Wesley 65.95 Advanced Programming in the Unix environment Stevens W. Addison-Wesley 65.95 Data on the Web Abiteboul Serge Buneman Peter Suciu Dan Morgan Kaufmann Publishers 39.95 The Economics of Technology and Content for Digital TV Gerbarg Darcy CITI Kluwer Academic Publishers 129.95

最后在Program.cs文件里写入如下代码:

using System; using System.Collections.Generic; using System.IO; using System.Xml; using System.Linq; using System.Xml.Linq; namespace LinqToXmlSample { class Program { static void Main(string [] args) { //列出所有Serge and Peter共同撰写的书籍 XDocument doc = XDocument.Load(SetDataPath() + "bib.xml"); var b1 = doc.Descendants("book") .Where(b => b.Elements("author") .Elements("first") .Any(f => (string)f == "Serge")); var b2 = doc.Descendants("book") .Where(b => b.Elements("author") .Elements("first") .Any(f => (string)f == "Peter")); var books = b1.Concat(b2); foreach (var q in books) Console.WriteLine(q); Console.ReadLine(); } static public string SetDataPath() { string path = Environment.CommandLine; while (path.StartsWith("/"")) { path = path.Substring(1, path.Length - 2); } while (path.EndsWith("/"") || path.EndsWith(" ")) { path = path.Substring(0, path.Length - 2); } path = Path.GetDirectoryName(path); return Path.Combine(path, "data//"); } } }

按下F5开始调试,运行界面如下:

 

你可能感兴趣的:(基于Visual Studio2010讲解C#4.0语法(2)--使用XQuery引擎操作XML文档)