2008-09-26 63 views
6

Có khung công tác nào để truy vấn Cú pháp SQL XML hay không, tôi nghiêm túc sử dụng các chuỗi lặp qua các danh sách nút. Truy vấn XML như SQL?


Hay đây chỉ là suy nghĩ mơ ước (nếu không ngu ngốc) và chắc chắn là không thể vì XML không phải là một cơ sở dữ liệu quan hệ?

Trả lời

13

XQuery và XPath ... XQuery là nhiều hơn những gì bạn đang tìm kiếm nếu một cấu trúc SQL là mong muốn.

+0

Tuyệt vời, tôi đã sử dụng XPath vì nó được triển khai trong tệp SimpleXML của PHP, tôi đoán tôi đã bỏ lỡ XQuery. –

+0

Xquery thực hiện XPath, tuy nhiên nó là công việc của ma quỷ. – Tarski

2

.Net Framework cung cấp LINQ để thực hiện việc này hoặc bạn có thể sử dụng không gian tên .Net System.Data để tải dữ liệu từ tệp XML.

Bạn thậm chí có thể tạo ra các truy vấn có tham gia một trong những bảng biểu, vv

Ví dụ, System.Data.DataTable cung cấp một phương pháp ReadXml().

2

Bạn có thể thử LINQ to XML, nhưng nó không phải là ngôn ngữ bất khả tri.

+0

Cũng không phải trong SQL tôi tin? – Meff

+0

Phần LINQ là .net, vì vậy bạn có thể sử dụng bất kỳ ngôn ngữ nào với trình biên dịch CLR –

0

SQL Server 2005 hỗ trợ XML DML trên kiểu gốc là xml loại dữ liệu.

1

XQuery là ngôn ngữ chức năng gần SQL nhất. XPath là một ký hiệu để định vị một nút trong tài liệu được sử dụng như một phần của XSLT và XQuery.

Cơ sở dữ liệu XML như MarkLogic đóng vai trò là công cụ XQuery cho dữ liệu XML, giống như cơ sở dữ liệu quan hệ đóng vai trò là công cụ SQL cho dữ liệu quan hệ.

+0

Sql Server và Oracle cũng hỗ trợ XQuery. – tuinstoel

0

XQuery chắc chắn là con đường phía trước. Đây là những gì được sử dụng bởi các cơ sở dữ liệu XML như eXistMarkLogic.

Trong thế giới Java có một số giải pháp để chạy XQuery trên các tập tin bằng phẳng, đáng chú ý nhất Saxon

Đối với .NET, không có quá nhiều có sẵn. Microsoft đã có một thư viện XQuery, mặc dù điều này đã được lấy từ .NET 2 và chưa bao giờ tái tạo lại. XQSharp là một thay thế .NET gốc, mặc dù hiện tại chỉ có một phiên bản dòng lệnh đã được phát hành.

1

Điều đó tùy thuộc vào vấn đề bạn đang giải quyết. Nếu tệp XML là khá lớn, đôi khi nó là một điều cần thiết để sử dụng một cái gì đó như phân tích cú pháp SAX để đi qua nút tập tin bằng nút, hoặc bạn sẽ nhận được OutOfMemoryException hoặc sẽ chạy ngay cả bộ nhớ ảo trên máy tính của bạn. Tuy nhiên, nếu kích thước tệp XML dự kiến ​​là tương đối nhỏ, bạn có thể chỉ cần sử dụng một cái gì đó giống như LINQ, cũng xem số answer của tôi - ở đây tôi đã cố gắng giải thích, làm thế nào để thực hiện lướt qua các nút dễ dàng hơn với các công trình như .

+0

Tôi chỉ chạy vào một vấn đề tương tự, tôi đã đọc MSXML6 trong 300 meg tập tin XML và sử dụng trở lên của một Gig RAM. May mắn thay điều này đã làm việc với win2k và tôi chỉ có một vài vấn đề với máy ảo với các tệp trang cực kỳ nhỏ. Tôi nghĩ rằng lợi nhuận lợi nhuận sẽ làm việc, nhưng tiếc là tôi là một lập trình Delphi và SOL cho tất cả các NET nóng. –

Các vấn đề liên quan