У меня такой код. Есть ли способ упростить написание и поддержку? Использование C # .NET 3.5.
string header(string title)
{
StringWriter s = new StringWriter();
s.WriteLine("{0}","<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\" \"http://www.w3.org/TR/html4/strict.dtd\">");
s.WriteLine("{0}", "<html>");
s.WriteLine("<title>{0}</title>", title);
s.WriteLine("{0}","<link rel=\"stylesheet\" type=\"text/css\" href=\"style.css\">");
s.WriteLine("{0}", "</head>");
s.WriteLine("{0}", "<body>");
s.WriteLine("{0}", "");
}
Я мог бы просто написать:
s.WriteLine("{0}", @"blah blah
many
new
lines
blah UHY#$&_#$_*@Y KSDSD<>\t\t\t\t\t\tt\t\t\\\t\t\t\t\\\h\th'\h't\th
hi
done");
Это будет работать, но мне нужно заменить все"
с участием""
.
Все ответы
Вам, вероятно, лучше использовать
HtmlTextWriter
илиXMLWriter
чем равнинаStringWriter
. Они позаботятся о побеге за вас, а также позаботятся о том, чтобы документ был правильно сформирован.Эта страницапоказывает основы использования
HtmlTextWriter
класс, суть которого:Когда я занимаюсь этой проблемой на других языках, я разделяю код и HTML. Что-то вроде:
1.) Создайте шаблон HTML. использовать
[varname]
заполнители для обозначения замененного / вставленного содержимого.2.) Заполните переменные вашего шаблона из массива или структуры / отображения / словаря
Я знаю, что вы спрашивали о C #, но если вы хотите использовать любой язык .Net, я настоятельно рекомендую Visual Basic для решения этой конкретной проблемы. Visual Basic имеет функцию под названием XML Literals, которая позволит вам писать подобный код.
Это позволяет вам писать простой HTML с дырами в выражениях в старом стиле ASP и делает ваш код очень удобочитаемым. К сожалению, этой функции нет в C #, но вы можете написать один модуль на VB и добавить его в качестве ссылки на свой проект C #.
Запись в Visual Studio также допускает правильные отступы для большинства XML-литералов и целых выражений. Отступ для отверстий под выражения лучше в VS2010.
Используйте
XDocument
чтобы создать модель DOM, затем запишите ее, используяXmlWriter
. Это даст вам удивительно лаконичную и читаемую нотацию, а также красиво отформатированный вывод.Возьмем эту примерную программу:
Это генерирует следующий вывод:
Вы могли бы использовать
System.Xml.Linq
объекты. Они были полностью переделаны из старыхSystem.Xml
дней, когда создание XML с нуля действительно раздражало.Думаю, кроме doctype, вы могли бы легко сделать что-то вроде:
Самый простой способ - использовать объект XmlWriter. Это можно использовать для создания действительного HTML и позаботится обо всех неприятных escape-последовательностях за вас.
Вы можете использоватьШаблоны T4для создания Html (или любого другого) из вашего кода. посмотри это:http://msdn.microsoft.com/en-us/library/ee844259.aspx
Если вы хотите создать HTML-документ, аналогичный тому, как вы бы создали XML-документ на C #, вы можете попробовать библиотеку с открытым исходным кодом Microsoft,Пакет гибкости HTML.
Он предоставляет объект HtmlDocument, имеющий API, очень похожий на API
System.Xml.XmlDocument
класс.Вы можете использовать ASP.NET для генерации вашего HTML вне контекста веб-страниц.Вот статьяэто показывает, как это можно сделать.
Вы можете использовать некоторые сторонние библиотеки с открытым исходным кодом для создания строго типизированного проверенного (X) HTML, напримерCityLizard Frameworkили Sharp DOM.
ОбновитьНапример
Это не универсальное решение, однако, если ваша цель - иметь или поддерживать шаблоны электронной почты, то System.Web имеет встроенный класс, называемыйMailDefinition. Этот класс используется элементами управления членством ASP.NET для создания электронных писем в формате HTML.
Выполняет ту же замену строк, как упомянуто выше, но упаковывает все это в MailMessage для вас.
Вот пример из MSDN:
С появлением Razor в ASP.net MVC лучший способ писать HTML на C # - это Razor Engine.
Шаблон:
Полный образец см.Вот
Вы можете написать свои собственные классы с его методом Render и другими атрибутами, чтобы избежать большого беспорядка, если вы его часто используете, а затем также использовать HTMLWriter или xmlwriter. Эта логика используется на страницах asp.net, вы можете наследовать от webControl и переопределитьметод рендеринга, что отлично, если вы разрабатываете элементы управления на стороне сервера.
Этотможет быть хорошим примером.
С уважением
Это действительно зависит от того, что вы собираетесь делать, и, в частности, от того, какую производительность вам действительно нужно предложить.
Я видел замечательные решения для разработки строго типизированного HTML (полные модели управления, будь то веб-элементы управления ASP.NET или аналогичные), которые просто добавляют невероятной сложности проекту. В других ситуациях он идеален.
В порядке предпочтения в мире C #,
Я написал эти уроки, которые мне очень пригодились. Это просто, но прагматично.
HSharp - это библиотека, используемая для простого и быстрого анализа языка разметки, такого как HTML. Установить:
PM> Install-Package Obisoft.HSharp
и вывод:
Я искал что-то похожее на jquery для генерации dom на C # (мне не нужно разбирать). К сожалению, найти легкое решение не удалось, поэтому я создал этот простой класс, унаследованный от System.Xml.Linq.XElement. Ключевой особенностью является то, что вы можете связать оператор, как при использовании jquery в javascript, чтобы он был более плавным. Он не полнофункциональный, но он делает то, что мне нужно, и если есть интерес, я могу запустить git.
Образец:
вывод из приведенного выше кода:
Leave a Reply