program story

C # 템플릿 엔진

inputbox 2020. 11. 12. 08:11
반응형

C # 템플릿 엔진


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

엔진은 루프 (템플릿의 일부를 하나 이상의 객체에서 복제)와 조건 (일부 조건이 참인 경우에만 최종 HTML / XML에 템플릿의 일부를 추가)을 지원해야합니다. 누군가 나에게 좋은 옵션을 추천하고 그러한 코드 샘플에 대한 링크를 추가 할 수 있습니까?

또한 루프를 사용하여 테이블 행을 복제하거나 전체 테이블 (HTML 버전)과 복잡한 요소 (XML 버전)를 복제해야합니다.


좋은 결과로 StringTemplate사용했습니다 . 일부 리소스 :


RazorView 엔진 사용 방법 : RazorEngine 을 사용하여 지역화 가능한 텍스트 템플릿 엔진을 만드는 방법에 대한 멋진 기사가 있습니다.


T4, Text Template Transformation Toolkit은 어떻습니까? 요구 사항에 맞아야하며 Visual Studio에 기본 제공됩니다.

훌륭한 T4 리소스 :

Oleg Sych의 블로그

T4 편집기

T4 도구 상자


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

구문은와 매우 유사하며 String.Format매우 간단하고 배우고 사용하기 쉽습니다. 다음은 문서의 구문 예입니다.

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

라이브러리는 오픈 소스이며 쉽게 확장 할 수 있으므로 추가 기능으로 향상시킬 수도 있습니다.


XSLT를 보셨습니까 ? 데이터 개체를 xmlserialize하여 XML의 소스 데이터 형식으로 시작해야합니다. 루프if 문 을 쉽게 할 수 있습니다 !

Kathleen Dollard는 XSLT를 통한 코드 생성에 관한 책을 가지고 있습니다.

개인적으로 저는 T4 의 열렬한 팬 이지만 (특히 C #을 생성 할 때) XML과 HTML이 출력 유형이므로 XSLT가 다루었 음을 알 수 있습니다. 또한 매우 교차 플랫폼입니다.


내 클래스 라이브러리에 기존 스타일의 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 저장소 또는 웹 페이지의 클래스 라이브러리에서 코드를 사용할 수 있습니다.

Subversion 저장소의 경우 사용자 이름과 암호가 필요합니다. 둘 다 따옴표없이 "게스트"입니다.

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

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


.NET 템플릿 엔진 이 필요할 수 있습니다 .

템플릿 코드 :

$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

참고 URL : https://stackoverflow.com/questions/1518954/c-sharp-template-engine

반응형