【问题标题】:Querying XML like SQL?像 SQL 一样查询 XML?
【发布时间】:2010-09-13 13:03:59
【问题描述】:

有没有查询 XML SQL 语法的框架,我真的厌倦了遍历节点列表。


或者这只是一厢情愿(如果不是白痴的话)而且肯定不可能,因为 XML 不是关系数据库?

【问题讨论】:

    标签: sql xml language-agnostic frameworks


    【解决方案1】:

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

    【讨论】:

    • 酷,我一直在使用 XPath,因为它是用 PHP 的 simpleXML 实现的,我想我只是错过了 XQuery。
    • Xquery 实现了 XPath,但它是魔鬼的工作。
    【解决方案2】:

    您可以尝试使用 LINQ to XML,但它与语言无关。

    【讨论】:

    • LINQ 部分是 .net,因此您可以使用任何带有 CLR 编译器的语言
    【解决方案3】:

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

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

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

    【讨论】:

      【解决方案4】:

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

      MarkLogic 等 XML 数据库用作 XML 数据的 XQuery 引擎,就像关系数据库用作关系数据的 SQL 引擎一样。

      【讨论】:

      • Sql Server 和 Oracle 也支持 XQuery。
      【解决方案5】:

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

      但是,如果 XML 文件的预期大小相对较小,您可以简单地使用 Linq 之类的东西,另请参阅我的 answer - 在这里我试图解释,如何使用 收益回报

      【讨论】:

      • 我刚刚遇到了一个类似的问题,我已经让 MSXML6 读取了 300 兆 XML 文件并使用了超过 1 Gig 的 RAM。幸运的是,这适用于 win2k,并且我在使用非常小的页面文件的虚拟机时遇到了一些问题。我认为 Yield return 会起作用,但不幸的是,我是 Delphi 程序员和所有 .NET 热门的 SOL。
      【解决方案6】:

      SQL Server 2005 在其原生 xml 数据类型上支持 XML DML

      【讨论】:

        【解决方案7】:

        XQuery 无疑是前进的方向。这就是 eXistMarkLogic 等 XML 数据库所使用的。

        在 Java 世界中,有多种在平面文件上运行 XQuery 的解决方案,最著名的是 Saxon

        对于 .NET,没有那么多可用的。 Microsoft 确实有一个 XQuery 库,尽管它是从 .NET 2 中提取的,并且从未出现过。 XQSharp 是本机 .NET 替代方案,尽管目前仅发布了命令行版本。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-08-15
          • 2012-08-11
          • 1970-01-01
          • 2010-11-21
          • 2020-10-10
          • 1970-01-01
          • 2012-12-27
          • 2020-08-14
          相关资源
          最近更新 更多