Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > Генерация текста из шаблона с использованием C#


Автор: WSairus 28.5.2013, 15:53
Доброе время суток, прошу подсказать не слишком сложное решение для следующей задачи: нужно из программы на C# обрабатывать текстовые шаблоны, при этом используя значения переменных и еще некоторые синтаксические фишки. Файл должен быть внешним и загружаться по выбору. В шаблоне могут использоваться логические выражения, циклы, блоки - минимальный набор языка программирования. Пример шаблона:

Код

<html>
<head><title><#= user.Name #></title></head>
<body>
<#= if (user.Param1 != null) #>
   <h1>Заголовок по условию</h1>
<p>Некоторый текст с использованием переменных <#= user.Param1 #> и <#= user.Param2 #>.</p>
</body>
</html>


Соответственно в программе:

Код

string text = File.ReadAllText("Code.txt");
string result = XXX.TransformText(text, user);


Вроде есть генератор T4, но как загрузить произвольный файл я не разобрался. Есть ли готовые решения для подобных задач.

Автор: gambit 29.5.2013, 11:34
Посмотри на хабре статья была, про юзание razor в отрыве от mvc

Добавлено через 23 секунды
http://habrahabr.ru/post/173923/

Автор: diadiavova 29.5.2013, 21:21
Да собственно вот тема
http://msdn.microsoft.com/en-us/library/bb126519.aspx
Но это возможно там, где на компе студия установлена, отдельно от студии движок вроде не поставляется.
Есть поддержка T4 в SharpDevelop и MonoDevelop, в силу оупенсорсности проектов их библиотеки использовать можно, но насчет туториалов по поводу того, как это сделать, ничего сказать не могу, возможно придется разбираться методом научного тыка.

Из общедоступных инструментов могу порекомендовать XSLT, во фреймворке есть все для обработки этого языка, а возможности у него очень неплохие, к тому же его расширять кодом можно, в том числе на C#.

Этот ответ добавлен с нового Винграда - http://ru.vingrad.com//object-id51a4a8f06ccc19ea1b000002#findElement_E7045_51a647396ccc19f9210004e1_0

Автор: diadiavova 29.5.2013, 21:23
Вдогонку
http://community.sharpdevelop.net/blogs/mattward/archive/2011/06/26/T4TemplatesInSharpDevelop.aspx
http://mjhutchinson.com/journal/2010/05/03/t4_templates_monodevelop

Автор: WSairus 30.5.2013, 13:49
gambit, большое спасибо. Использовал это решение - работает идеально. Только велосипедов делать не стал, а использовал RazorEngine - компиляция и выполнение в 1 строку кода + поддержка многопоточности.

diadiavova, проблема была в том, что нужно загружать внешний файл и обработать его уже после компиляции. Как это сделать - я не разобрался, да и синтаксис у Razor намного компактнее.

Автор: diadiavova 30.5.2013, 14:55
Цитата(WSairus @  30.5.2013,  14:49 Найти цитируемый пост)
 проблема была в том, что нужно загружать внешний файл и обработать его уже после компиляции. 

Моя первая ссылка была как раз об этом, там дальше есть ссылка на пошаговое руководство
http://msdn.microsoft.com/en-us/library/bb126579.aspx
Цитата(WSairus @  30.5.2013,  14:49 Найти цитируемый пост)
Как это сделать - я не разобрался, да и синтаксис у Razor намного компактнее. 

Ну, если вариант Гамбита устроил - хорошо, я просто предложил варианты.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)