2008-09-26 68 views
6

是否有任何查询XML SQL语法的框架,我严重厌倦了遍历节点列表。 像SQL一样查询XML?


还是这只是一厢情愿的想法(如果不是愚蠢的),当然不可能,因为XML不是一个关系数据库?

回答

13

XQuery和XPath ...如果需要SQL结构,XQuery更适合您的需求。

+0

很酷,我一直在使用XPath,因为它是在PHP的simpleXML中实现的,我想我只是错过了XQuery。 – 2008-09-26 17:51:36

+0

Xquery实现XPath,但它是魔鬼的工作。 – Tarski 2009-02-28 01:24:39

2

.Net Framework提供了LINQ来执行此操作,或者您可以使用.Net System.Data命名空间从XML文件加载数据。

你甚至可以创建具有表之间的连接的查询等

例如,System.Data.DataTable提供了ReadXml()方法。

2

你可以尝试LINQ to XML,但它不是语言不可知的。

+0

我不相信SQL吗? – Meff 2008-09-26 20:26:38

+0

LINQ部分是.net,因此您可以使用任何语言和CLR编译器。 – 2008-09-27 15:50:16

1

XQuery是一种最接近SQL的函数式语言。 XPath是用于在文档中查找用作XSLT和XQuery一部分的节点的符号。

XML数据库(如MarkLogic)充当XML数据的XQuery引擎,就像关系数据库充当关系数据的SQL引擎一样。

0

XQuery肯定是前进的方向。这是XML数据库使用的内容,如eXistMarkLogic

在Java世界里有关于平面文件运行XQuery中,最值得注意的是Saxon

对于.NET几种解决方案,有没有这么多可用的。微软确实有一个XQuery库,尽管这是从.NET 2中提取的,并且从未重新出现过。 XQSharp是一个本地的.NET替代品,尽管目前只有一个命令行版本已经发布。

1

这取决于你正在解决的问题。如果XML文件非常大,有时候需要使用类似SAX解析器的文件来逐个遍历文件节点,否则将会出现OutOfMemoryException,或者甚至会耗尽计算机上的虚拟内存。

但是,如果XML文件的预期大小比较小,你可以简单地使用类似的LINQ,还看到我的answer - 在这里,我试图解释,如何使通过节点来遍历具有结构更容易像收益率回报