0

ユーザーがビュー ファイルなどをいじることなく、RSS フィード アイテムとシステム生成の電子メールのレイアウトを編集できるように、単純な「ユーザー テンプレート」システムを構築しようとしています。これは、文字列内のタグをコンテンツに置き換えるために使用している関数です。

private const string URL_TAG_REGEX = @"{{(?<TagName>\w*)}}";
private static string ReplaceTags(string content, 
    Dictionary<string, object> values) {
        Regex r = new Regex(UT_TAG_REGEX);
        foreach (string tag in values.Keys) {
            content = r.Replace(content, 
                m => (m.Groups["TagName"].Value == tag ? 
                    values[tag].ToString() : string.Empty));
        }
    return content;
}

私のテスト テンプレートは次のようになります。

<a href="{{link}}">{{title}}</a> - {{date}}<br />
{{description}}

これでレンダリングされています:

<%= UserTemplates.Render("overview_rss_item", new {
        link = item.Link,
        title = item.Title,
        date = item.PublishDate,
        description = item.Description
    }) %>

Render メソッドは、ファイルを開き、匿名オブジェクトを Dictionary に変換します。{{link}} タグのみが一致することを除いて、ほとんど機能します。残りは string.Empty に置き換えられています。

4

1 に答える 1

0

すべての一致を置き換えているため、値がタグと等しくない場合は、それを String.Empty に置き換えています。これを試して:

    foreach (string tag in values.Keys) {
        content = r.Replace(content, 
            m => (m.Groups["TagName"].Value == tag ? 
                values[tag].ToString() : m.Value));
    }
于 2009-02-12T20:53:39.603 に答える