2009-10-05 15 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、そのシンプルで速く、あなたはそれをインストールすることができますnuget 'Install-Package Tor' –

答えて

15

何T4、Text Template Transformation Toolkitでしょうか?要件に合わせて、Visual Studioに組み込まれている必要があります。

グレートT4資源:

Oleg Sych's blog

T4 Editor

T4 Toolbox

+1

さらに指摘すべきことは、これがC#構文のテンプレートエンジンであることです。したがって、新しいテンプレート構文を学ぶ必要はありません。 –

6

あなたがXSLTで見たことがありますか? XMLでソースデータフォーマットを開始する必要があります。多分、データオブジェクトをxmlserializeする必要があります。あなたは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#コードを記述するので、テンプレートファイル全体が1つのメソッドにコンパイルされるという制限があるため、C#でできることはほとんどあります。つまり、ヘルパークラスなどをテンプレート内で定義することはできませんが、ヘルパーメソッドの場合は匿名メソッドを使用できます。

例:

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

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

これは、別のアプリケーションドメイン内のC#クラスにコンパイルされ、生成テキストを含む文字列を返すように実行することができます。

テンプレートに引数を渡すこともできますし、参照クラスライブラリを使用することもできます。つまり、カスタムデータ構造を渡すことも、テンプレートからデータアクセスレイヤーまたはビジネスロジックコードにアクセスすることもできます。

  • Subversion repository of source code
  • Subversion repository of binaries、最新のビルドと渡すソースコードで確認含まれています

    あなたはそれを見たい場合は、コードは私のSubversionリポジトリまたはWebページからの私のクラスライブラリで提供されていますユニットテスト)

サブバージョンリポジトリの場合、ユーザ名とパスワードが必要です。両方とも "ゲスト"で、引用符は必要ありません。

コードは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" 

ライブラリは、オープンソースと簡単に拡張可能ですので、あなたはまた、追加機能とそれを向上させることができます。

関連する問題