是否可以使用SQL查询XML文件?

时间:2010-04-26 08:56:13

标签: c# .net sql xml

目前我正在研究一个我们不想在c#/ wpf程序上做太多改变但又喜欢添加功能的情况。目前,我们允许某些用户将sql查询添加到数据库以检索客户数据,因此必须指定自定义连接字符串/提供者名称。有了这些信息,就可以创建连接并使用c#获取数据。

但是,我们希望添加允许该用户组查询XML文件的可能性,并使用某个连接字符串/提供者名称。我只是在.net中寻找可能性来做到这一点,但似乎找不到合适的方式......这样的事情可能吗? (也许OleDb / ODBC方式?)

编辑:为了清楚起见,我想说明解决方案必须能够适应将数据源与指定连接字符串连接的模式,与指定的提供程序一起执行SQL查询。

edit2:在回顾了前三个答案后,我决定超越XML。这篇文章似乎说明了上述情况最好(唯一的区别是使用XLS而不是XML):How to query excel file in C# using a detailed query。然而,XML的可能解决方案仍然受到欢迎......

提前致谢。

4 个答案:

答案 0 :(得分:4)

是。使用 Linq2Xml

http://www.hookedonlinq.com/LINQtoXML5MinuteOverview.ashx

http://www.liquidcognition.com/tech-tidbits/linq2xml-example.aspx

// Loading from a file, you can also load from a stream
XDocument loaded = XDocument.Load(@"C:\contacts.xml");


// Query the data and write out a subset of contacts
var q = from c in loaded.Descendants("contact")
        where (int)c.Attribute("contactId") < 4
        select (string)c.Element("firstName") + “ “ +
      (string)c.Element("lastName");


foreach (string name in q)
    Console.WriteLine("Customer name = {0}", name);

答案 1 :(得分:1)

AFAIK,您不能对XML使用标准sql语句。但你可以使用的是XQuery。 它是xml文档的查询语言。

http://en.wikipedia.org/wiki/XQuery
http://www.w3schools.com/xquery/default.asp

HTH

答案 2 :(得分:0)

许多XML库允许针对XML文档发出XPath查询,但语法与SQL非常不同,语义也非常不同。此外,XPath并不像SQL那样真正生成结果集 - 它返回XML文档的一部分或字段的内容。我会说,如果应用程序的其余部分面向SQL结果集,您可能会遇到明显的阻抗不匹配。

虽然还有另一种语言(XQuery)更加聪明,但XPath也比SQL更笨。但是,良好的XQuery支持在XML解析库中很少见。 XQuery与SQL的工作方式完全不同,因此您的用户也可能无法理解它。

许多DBMS平台(包括SQL Server)也具有支持在SQL查询中嵌入Xpath表达式的本机XML数据类型。使用CROSS APPLY,您可以执行连接操作以将分层数据结构展平为SQL结果集。但是,这非常繁琐,您的用户可能无法使其正常工作。

简而言之,我认为添加这种查询XML文档的工具可能效果不佳。

一个选项可能是构建一个破坏XML文档并将内容填充到与您的应用程序具有相同结构的数据库的工具。这实现起来相当简单,不需要用户学习新的范例。

答案 3 :(得分:-1)

Linq是一种类似.NET的SQL语言,它允许您编写SQL样式语句来查询大量内容。它特别允许您为XML文档执行此操作。

这个article非常了解Linq to XML。

以下是其外观/作品的示例

var q = from c in xmlSource.contact
        where c.contactId < 4
        select c.firstName + " " + c.lastName;