2009-10-05 3 views
62

나는 C# 코드, 템플릿 엔진에서 사용하기 쉬운 독립 실행 형을 찾고 있습니다. 데이터의 자리 표시자를 사용하여 HTML 및 XML 파일을 만들고 만들고 코드의 데이터로 채 웁니다.C# 템플릿 엔진

엔진은 루프 (서식 파일의 일부를 하나의 개체 복제)와 조건 (일부 조건이 참인 경우에만 최종 HTML/XML에 템플릿의 일부를 추가)을 지원해야합니다. 나를 위해 좋은 옵션을 추천하고, 그와 같은 코드 샘플에 대한 링크와 내 요구에 권장 구성 요소를 사용하는 방법에 대한 문서를 추가 할 수 있습니까?

또한 테이블 행 또는 HTML 버전의 전체 테이블과 XML 버전의 복잡한 요소를 복제하려면 루프를 사용해야합니다.

+0

도 참조를 http://stackoverflow.com/questions/733378/whats-a-good-way-of-doing-string-templating-은 in-net – Simon

+0

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

+0

.NET 대안 인 StringTemplate은 https : /입니다. /github.com/beto-rodriguez/Templator, 간단하고 빠르며 설치할 수 있습니다.'Install-Package Tor' –

답변

15

무엇, Text Template Transformation Toolkit T4는 어떻습니까? 요구 사항에 맞아야하며 Visual Studio에 내장되어 있습니다.

큰 T4 자원 :

Oleg Sych's blog

T4 Editor

T4 Toolbox

+1

더 지적해야 할 것은 C# 구문을 사용한 템플릿 엔진입니다. 따라서 새로운 템플릿 구문을 배울 필요가 없습니다. –

6

당신은 XSLT 봤어? XML로 소스 데이터 형식을 시작해야합니다. 데이터 개체를 xml 직렬화하면됩니다. 쉽게 loopsif statements을 할 수 있습니다!

캐슬린 돌라 드는 a book on generating code via XSLT입니다.

저는 개인적으로 T4의 팬이며 (특히 C#을 생성 할 때), XML 및 HTML이 출력 유형이므로 XSLT를 사용했을 가능성이 있습니다. 게다가 그것은 매우 교차 플랫폼입니다.

+4

XSLT의 문제는 XSLT 1.x가 몇 가지 간단한 작업을 만들어 * 아프고 * XSLT 2.x가 신화 (또는 적어도 내 스택에서는 사용할 수 없음)입니다. ( –

2

필자는 이전 스타일 ASP 또는 T4와 비슷한 모양으로 작동하는 클래스 라이브러리에 템플릿 엔진을 내장했습니다.

기본적으로 < %%> 블록에 C# 코드를 작성하므로 C#에서 수행 할 수있는 대부분의 작업을 수행 할 수 있으며 전체 템플릿 파일이 단일 메서드로 컴파일된다는 제한이 있습니다. 즉, 도우미 클래스 등은 템플릿 내부에서 정의 할 수 없지만 도우미 메서드에서는 익명 메소드를 사용할 수 있습니다.

예 :

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

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

이 후 다른 AppDomain에있는 C# 클래스로 컴파일되고, 생성 된 텍스트를 포함하는 문자열을 반환하도록 실행될 수있다.

또한 템플릿에 인수를 전달할 수도 있고 클래스 라이브러리를 참조 할 수도 있습니다. 즉, 사용자 지정 데이터 구조를 전달하거나 템플릿의 데이터 액세스 계층 또는 비즈니스 논리 코드에 액세스 할 수 있습니다.

Subversion 저장소의 경우 사용자 이름과 비밀번호가 필요하며 둘 다 따옴표없이 '손님'입니다.

코드는 LVK.Text.Templating 프로젝트/어셈블리에 있습니다.

또한 알려 주시면 (프로필 페이지의 이메일 참조 또는 의견 남기기) 알려 주시면 몇 가지 예를 알려 드리겠습니다.

+0

왜 다시 발명했는지 이해가 안됩니다. ASP.NET ... –

+5

Visual Studio 내에서 코드를 생성하는 데 사용하고 있다는 점을 감안할 때, 다른 것들 중에서도 ASP.NET 엔진을 로컬로 설정하는 것이 타당하지 않을 것이라고 생각합니다. 다른 사람들이 이것을 위해 설정 한 전체 IIS 구성이 필요하다는 요구를 받기 위해 StringTemplate을 사용하지 마십시오. –

+0

@ silky ASP.NET은 단순한 템플릿 언어가 아닙니다. – chakrit

1

.NET Template Engine이 필요할 수 있습니다.

템플릿 코드 :

$Book.StaticId$ 

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

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

C# 코드 :

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); 
     } 
    } 

출력은 다음과 같습니다

AABB 

ID: 100 - Author: John Borders 

12 
+9

T4 템플릿을 사용하는 것과는 대조적으로 왜 누군가가 비용을 지불하게되는지 상상할 수 없습니다. 이것들이 T4 템플릿보다 어떤면에서 더 낫습니까? –

+1

T4는 컴파일 된 템플릿이므로 사용자는 .NET 컴파일러 없이도 자신의 템플릿을 만들 수 없습니다. 여전히 많은 opensource 대안이 있습니다. –

9

SmartFormat 귀하의 모든 요구 사항을 충족하는 아주 간단한 라이브러리이다. "자연어"텍스트를 작성하는 데 중점을두고 있으며 목록에서 데이터를 생성하거나 조건부 논리를 적용하는 데 적합합니다.

구문은 String.Format과 매우 유사하며 매우 간단하고 배우고 사용하기 쉽습니다. 여기에 문서에서 구문의 예는 다음과 같습니다

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

도서관은 오픈 소스와 쉽게 확장, 그래서 당신은 또한 추가 기능을 향상시킬 수 있습니다.