2009-10-05 25 views
62

Tôi đang tìm kiếm một độc lập, dễ sử dụng từ mã C#, công cụ tạo mẫu. Tôi muốn tạo tệp HTML và XML với trình giữ chỗ cho dữ liệu, và điền chúng với dữ liệu từ mã của tôi.C# mẫu động cơ

Động cơ cần hỗ trợ vòng lặp (sao chép các phần của mẫu tạo thêm một đối tượng) và điều kiện (thêm các phần của mẫu vào HTML/XML cuối cùng nếu một số điều kiện là đúng). Ai đó có thể giới thiệu một lựa chọn tốt cho tôi và thêm liên kết vào mẫu mã ít nhiều như vậy và một số tài liệu về cách sử dụng thành phần được đề xuất cho nhu cầu của tôi không?

Tôi cũng cần phải sử dụng vòng lặp để lặp lại các hàng của bảng hoặc thậm chí toàn bộ bảng (trong phiên bản HTML) và các phần tử phức tạp (trong phiên bản XML).

+0

Xem thêm http://stackoverflow.com/questions/733378/whats-a-good-way-of-doing-string-templating- trong mạng – Simon

+0

http://stackoverflow.com/questions/9176859/generate-html-file-at-runtime-and-send-as-email-attachment/9177106#9177106 – adt

+0

Một thay thế .NET cho StringTemplate là https://github.com/beto-rodriguez/Templator, đơn giản và nhanh chóng của nó và bạn có thể cài đặt nó thành nuget 'Install-Package Tor' –

Trả lời

15

gì về T4, Text Template Transformation Toolkit? Nó phải phù hợp với yêu cầu của bạn và được tích hợp sẵn trong Visual Studio.

lớn nguồn lực T4:

Oleg Sych's blog

T4 Editor

T4 Toolbox

+1

Một điều nữa cần được chỉ ra là đây là một công cụ tạo khuôn mẫu với cú pháp C#. Vì vậy, không cần phải tìm hiểu cú pháp templating mới. –

6

Bạn đã nhìn XSLT? Bạn sẽ phải bắt đầu với định dạng dữ liệu nguồn của bạn trong XML, có thể bằng cách xmlserializing các đối tượng dữ liệu của bạn. Bạn có thể làm loopsif statements một cách dễ dàng!

Kathleen Dollard có a book on generating code via XSLT.

Cá nhân, tôi là người hâm mộ lớn của T4 (đặc biệt khi tạo C#), nhưng bạn có thể thấy rằng vì XML và HTML là các loại kết xuất XSLT của bạn. Cộng với nó là rất đa nền tảng.

+4

Vấn đề với XSLT là XSLT 1.x làm cho một số nhiệm vụ đơn giản * đau đớn * và XSLT 2.x là một huyền thoại (hoặc ít nhất không có trong ngăn xếp của tôi): ( –

2

Tôi có một công cụ tạo khuôn mẫu được tích hợp vào thư viện lớp học của tôi trông và hoạt động tương tự như ASP kiểu cũ hoặc T4 cho vấn đề đó.

Bạn về cơ bản viết mã C# trong <%%> khối và do đó có thể thực hiện hầu hết mọi thứ mà C# có thể thực hiện, với giới hạn toàn bộ tệp mẫu đang được biên dịch thành một phương thức. Nói cách khác, bạn không thể định nghĩa các lớp trợ giúp và như vậy bên trong khuôn mẫu, nhưng đối với các phương thức trợ giúp bạn có thể làm các phương thức nặc danh.

Ví dụ:

<% 
    var firstname = "Bob"; 
    var count = 10; 

    for (Int32 index = 0; index < count; index++) 
    { 
%> 
<%= firstname %> x <%= index+1 %>/<%= count %> 
<% 
    } 
%> 

này sau đó sẽ được biên dịch để một lớp C# trong appdomain khác, và có thể được thực hiện để trả về chuỗi chứa văn bản được sản xuất.

Bạn cũng có thể chuyển đối số vào mẫu và cũng tham khảo thư viện lớp, có nghĩa là bạn có thể chuyển cấu trúc dữ liệu tùy chỉnh hoặc truy cập lớp truy cập dữ liệu hoặc mã logic nghiệp vụ từ mẫu của bạn.

Nếu bạn muốn nhìn vào nó, các mã có sẵn trong thư viện lớp học của tôi từ kho lưu trữ Subversion tôi hoặc trang web:

Đối với kho lưu trữ lật đổ bạn cần tên người dùng và mật khẩu, cả hai đều là "khách", không có dấu ngoặc kép.

Mã nằm trong dự án/lắp ráp LVK.Text.Templating.

Ngoài ra, hãy cho tôi biết (xem email trên trang tiểu sử hoặc để lại nhận xét) và tôi sẽ cung cấp cho bạn một số ví dụ khác.

+0

Tôi không hiểu tại sao bạn lại tái tạo ASP.NET ... –

+5

Xem xét tôi đang sử dụng nó để tạo ra mã bên trong Visual Studio, trong số những thứ khác, tôi không nghĩ rằng nó sẽ là khả thi để thiết lập một công cụ ASP.NET đầy đủ tại địa phương cho điều đó.Tôi nghĩ rằng bạn sẽ balk tại StringTemplate, như được giới thiệu bởi những người khác để có một yêu cầu rằng bạn sẽ cần một cấu hình IIS đầy đủ được thiết lập cho điều này: –

+0

@silky ASP.NET không chỉ là một ngôn ngữ templating. – chakrit

1

Bạn có thể cần số này .NET Template Engine.

Mẫu Mã số:

$Book.StaticId$ 

ID: $bk.BookId$ - Author: $bk.Author.Name$ 

Length of the author's Name: $bk.Author.Name.Length$ 

C# Code:

class Author 
    { 
     public string Name 
     { 
      get 
      { 
       return "John Borders"; 
      } 
     } 
    } 
    class Book 
    { 
     public static string StaticId 
     { 
      get 
      { 
       return "AABB"; 
      } 
     } 
     public int BookId 
     { 
      get 
      { 
       return 100; 
      } 
     } 
     public Author Author 
     { 
      get 
      { 
       return new Author(); 
      } 
     } 
    } 
    public class PropertySample1 
    { 
     [STAThread] 
     static void Main() 
     { 
      TemplateEngine dt = new TemplateEngine(); 
      dt.LoadFromFile("Template.tpl"); 
      Book book = new Book(); 
      dt.SetValue("bk", book); 
      dt.UsingNamespace("CSharp,Demo"); 
      string output = dt.Run(); 
      Console.WriteLine(output); 
     } 
    } 

Output là:

AABB 

ID: 100 - Author: John Borders 

12 
+9

Tôi không thể tưởng tượng tại sao bất cứ ai sẽ trả tiền cho điều đó như trái ngược với chỉ sử dụng mẫu T4. Các mẫu này có tốt hơn các mẫu T4 theo một cách nào đó không? –

+1

T4 được biên dịch mẫu, do đó người dùng không thể tạo mẫu của riêng mình mà không cần có trình biên dịch .NET. nhưng vẫn còn nhiều lựa chọn thay thế mã nguồn mở –

9

SmartFormat là một thư viện khá đơn giản mà đáp ứng tất cả yêu cầu của bạn. Nó tập trung vào việc soạn thảo văn bản "ngôn ngữ tự nhiên" và rất tuyệt vời để tạo dữ liệu từ danh sách hoặc áp dụng logic có điều kiện.

Cú pháp cực kỳ giống với String.Format và rất đơn giản và dễ học và dễ sử dụng. Dưới đây là ví dụ về cú pháp từ tài liệu:

Smart.Format("{Name}'s friends: {Friends:{Name}|, |, and}", user) 
// Result: "Scott's friends: Michael, Jim, Pam, and Dwight" 

Thư viện là mã nguồn mở và dễ mở rộng, vì vậy bạn cũng có thể cải thiện nó bằng các tính năng bổ sung.

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