2011-08-03 44 views
9

Có cách nào để chuyển đổi các truy vấn LINQ thành XSLT không? cùng một cách LINQ có thể được chuyển đổi sang SQL?Chuyển đổi LINQ thành XSLT

Tôi có nghĩa là nếu tôi có một XML được xác định rõ ràng XML (Tuân thủ một XSD) có cách nào để biên dịch các công cụ trong System.Linq.Expressions vào XSLT liên quan đến XML đó không?

Cảm ơn bạn. Về cơ bản tôi có một số dữ liệu ở một nơi (về cơ bản là khối dữ liệu tuần tự xml), và tôi cần xử lý chúng, tôi cần phải kết hợp và xử lý chúng.

Cả dữ liệu gốc đến và dữ liệu kết quả đầu ra là XML có thể tuần tự hóa và phù hợp với XSD được xác định rõ.

Tôi muốn tạo logic xử lý động - một nơi khác. Và cho phép người dùng của tôi thay đổi và chơi xung quanh với quá trình xử lý. Tôi có thể đại diện cho việc xử lý nó một cách dễ dàng với cây Expression. Cây biểu hiện tương tự như phân tích cây và có thể nắm bắt mã chương trình. Đây là cách LINQ to SQL hoạt động nó chuyển đổi các cây biểu thức thành các truy vấn SQL.

Vì tất cả dữ liệu thu nhập và đầu ra đều là XML được xác định rõ, tôi có thể thực hiện chuyển đổi dễ dàng với XSLT, nhưng tôi không quen với XSLT đủ để viết một trình tạo XSLT động. Vì vậy, tôi nghĩ rằng tôi có thể xây dựng các biến đổi trong C# và chuyển đổi chúng thành XSLT .... một lần nữa không phải mục đích chung C#, nhưng có thể là các truy vấn cụ thể trên một nhà cung cấp dữ liệu được xác định rõ.

Đối với ví dụ vì:

(Không mã thực)

var schemas = XSchemaSet.Load("a","b"); 
var doc = XDocument.Load("File",schemas); 

var result = from node in doc.Nodes 
      where node.Name == "Cats" || node.Name == "Dogs" 
      select (new Node(){Name = "Animal Owner", Value = node.Owner) 
var newDoc = new XDocument().AddNodes(result); 
newDoc.Validate(schemas); 

Về cơ bản tôi muốn một cái gì đó sẽ hoạt động như thế ... Tôi có thể viết rằng trong một truy vấn LINQ đơn nếu tôi sử dụng IQueryable.Aggregate

+4

Bạn có thể xây dựng không? Câu hỏi của bạn không có ý nghĩa nhiều. XSLT định nghĩa một tập hợp các phép biến đổi từ một XML sang một XML khác. Làm thế nào mà liên quan đến LINQ. Bạn có thể đưa ra bất kỳ ví dụ cụ thể nào không? Btw. Nếu bạn có một XSD, bạn có thể sử dụng 'xsd.exe' để tạo ra một mô hình đối tượng từ nó và sử dụng LINQ cho các đối tượng trên mô hình đối tượng đó. Và tại sao bạn muốn sử dụng XSLT anyway :-p – Steven

+1

Bạn có ý nghĩa gì bởi "LINQ có thể được chuyển đổi thành XML" là bạn đang nói về việc sử dụng LINq-to-XML thì LINQ không được chuyển thành XML nhưng truy vấn tài liệu XML –

+0

@Rune FS: tôi có nghĩa là SQL xin lỗi ... tức là trong LINQ to SQL các nhà cung cấp chuyển đổi biểu thức LINQ thành truy vấn SQL. –

Trả lời

3

Có, bạn có thể implement your own query provider, sử dụng XSLT trong nội bộ, nếu bạn có thể tìm ra cách truy vấn bằng XSLT.

+0

+1 cho liên kết. Nhưng tôi đã nhảy nhiều hơn cho một cái gì đó phù hợp hơn với câu hỏi của tôi –

0

Tại sao không chỉ sử dụng Linq2XML? Nó hoạt động trên XDocument và XElement

hoặc cách khác nếu bạn muốn mọi người xác định biến đổi bằng cách sử dụng xlst tại sao không chỉ thực thi một xslt đối với tài liệu trong mã?

Tôi không thấy cách có Linq2XSLT sẽ giúp giải quyết sự cố mà không cần tạo lại nó theo một dạng khác

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