Eu tenho um código como este. Existe uma maneira de tornar mais fácil escrever e manter? Usando 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}", "");
}
Eu também poderia simplesmente escrever:
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");
Vai funcionar, mas preciso substituir todos"
com""
.
Todas as respostas
Você provavelmente é melhor usar um
HtmlTextWriter
ou umXMLWriter
do que uma planícieStringWriter
. Eles vão cuidar de escapar para você, bem como garantir que o documento esteja bem formado.Esta páginamostra os fundamentos do uso do
HtmlTextWriter
classe, cuja essência é:Quando lido com esse problema em outras linguagens, procuro uma separação de código e HTML. Algo como:
1.) Crie um modelo HTML. usar
[varname]
marcadores de posição para marcar o conteúdo substituído / inserido.2.) Preencha suas variáveis de modelo a partir de uma matriz ou estrutura / mapeamento / dicionário
Eu sei que você perguntou sobre C #, mas se você está disposto a usar qualquer linguagem .Net, então eu recomendo o Visual Basic para este problema exato. Visual Basic tem um recurso chamado XML Literals que permitirá a você escrever código como este.
Isso permite que você escreva HTML direto com lacunas de expressão no antigo estilo ASP e torna seu código super legível. Infelizmente, esse recurso não está em C #, mas você pode escrever um único módulo em VB e adicioná-lo como uma referência ao seu projeto C #.
Escrever no Visual Studio também permite o recuo adequado para a maioria dos literais XML e conjuntos de expressão. O recuo para os orifícios de expressão é melhor no VS2010.
Use um
XDocument
para criar o DOM e, em seguida, escreva-o usando umXmlWriter
. Isso lhe dará uma notação maravilhosamente concisa e legível, bem como uma saída bem formatada.Faça este programa de amostra:
Isso gera a seguinte saída:
Você poderia usar
System.Xml.Linq
objetos. Eles foram totalmente redesenhados a partir do antigoSystem.Xml
dias que tornavam a construção de XML do zero realmente irritante.Além do doctype, eu acho, você poderia facilmente fazer algo como:
A maneira mais direta é usar um objeto XmlWriter. Isso pode ser usado para produzir HTML válido e cuidará de todas as sequências de escape desagradáveis para você.
Você pode usarModelos T4para gerar Html (ou qualquer) a partir do seu código. Veja isso:http://msdn.microsoft.com/en-us/library/ee844259.aspx
Se você está procurando criar um documento HTML semelhante a como criaria um documento XML em C #, pode experimentar a biblioteca de código aberto da Microsoft, aPacote de Agilidade Html.
Ele fornece um objeto HtmlDocument que tem uma API muito semelhante ao
System.Xml.XmlDocument
classe.Você pode usar ASP.NET para gerar seu HTML fora do contexto de páginas da web.Aqui está um artigoisso mostra como isso pode ser feito.
Você pode usar algumas bibliotecas de código aberto de terceiros para gerar HTML verificado (X) com tipo forte, comoFramework CityLizardou Sharp DOM.
AtualizarPor exemplo
Esta não é uma solução genérica, no entanto, se o seu objetivo é ter ou manter modelos de e-mail, então System.Web tem uma classe interna chamadaMailDefinition. Esta classe é usada pelos controles de associação ASP.NET para criar emails em HTML.
Faz o mesmo tipo de 'string substituir' as coisas mencionadas acima, mas empacota tudo em uma MailMessage para você.
Aqui está um exemplo do MSDN:
Com a introdução do Razor no ASP.net MVC, a melhor maneira de escrever HTML em C # é com o Razor Engine.
Modelo:
Para uma amostra completa, vejaaqui
Você poderia escrever suas próprias classes com seu método Render e outros atributos, para evitar uma grande confusão se você usá-lo muito, e então usar o HTMLWriter ou o xmlwriter também. Essa lógica é usada nas páginas asp.net, você pode herdar de webControl e substituir ométodo de renderização, o que é ótimo se você estiver desenvolvendo controles do lado do servidor.
estepoderia ser um bom exemplo.
Saudações
Realmente depende do que você está procurando e, especificamente, que tipo de desempenho você realmente precisa oferecer.
Já vi soluções admiráveis para o desenvolvimento de HTML fortemente tipado (modelos de controle completos, sejam eles ASP.NET Web Controls ou semelhantes) que apenas adicionam uma complexidade incrível a um projeto. Em outras situações, é perfeito.
Em ordem de preferência no mundo C #,
Escrevi essas aulas que me serviram bem. É simples, mas pragmático.
HSharp é uma biblioteca usada para analisar linguagem de marcação como HTML de forma fácil e rápida. Instalar:
PM> Install-Package Obisoft.HSharp
e saída:
Eu estava procurando por algo parecido com jquery para gerar dom em C # (não preciso analisar). Infelizmente, não tive sorte em encontrar uma solução leve, então criei esta classe simples que é herdada de System.Xml.Linq.XElement. A principal característica é que você pode encadear o operador como ao usar jquery em javascript para que seja mais fluente. Não tem todos os recursos, mas faz o que preciso e, se houver interesse, posso iniciar um git.
Amostra:
saída do código acima:
Leave a Reply