Tenho trechos de Html armazenados em uma tabela. Não páginas inteiras, sem tags ou similares, apenas formatação básica.
Gostaria de poder exibir esse Html apenas como texto, sem formatação , em uma determinada página (na verdade, apenas os primeiros 30 a 50 caracteres, mas essa é a parte fácil).
Como coloco o "texto" dentro desse Html em uma string como texto simples?
Então, este pedaço de código.
<b>Hello World.</b><br/><p><i>Is there anyone out there?</i><p>
Torna-se:
Olá Mundo. Tem alguém aí fora?
Respostas:
Se você está falando sobre remoção de tags, é relativamente simples se você não precisa se preocupar com coisas como
<script>
tags. Se tudo o que você precisa fazer é exibir o texto sem as tags, você pode fazer isso com uma expressão regular:Se você tiver que se preocupar com
<script>
tags e similares, então você precisará de algo um pouco mais poderoso do que as expressões regulares, porque você precisa rastrear o estado, algo mais como uma Gramática Livre de Contexto (CFG). Embora você possa conseguir isso com 'Da esquerda para a direita' ou correspondência não gananciosa.Se você pode usar expressões regulares, existem muitas páginas da web por aí com boas informações:
Se você precisa do comportamento mais complexo de um CFG, eu sugeriria o uso de uma ferramenta de terceiros, infelizmente não conheço uma boa para recomendar.
fonte
O HtmlAgilityPack gratuito e de código aberto tem em uma de suas amostras um método que converte HTML em texto simples.
Alimente-o com uma string HTML como
E você obterá um resultado de texto simples como:
fonte
script
estyle
marcar e escrever o texto interno de outros elementos na string de saída. Duvido que tenha passado muitos testes com entradas do mundo real.Não consegui usar o HtmlAgilityPack, então escrevi uma segunda melhor solução para mim
fonte
HTTPUtility.HTMLEncode()
destina-se a lidar com a codificação de tags HTML como strings. Ele cuida de todo o trabalho pesado para você. Da documentação do MSDN :HTTPUtility.HTMLEncode()
método, detalhado aqui :Uso:
fonte
Para adicionar à resposta de vfilby, você pode apenas realizar uma substituição RegEx em seu código; nenhuma nova classe é necessária. No caso de outros novatos como eu tropeçar nesta questão.
Então...
fonte
Processo de três etapas para converter HTML em texto simples
Primeiro, você precisa instalar o pacote Nuget para HtmlAgilityPack. Segundo, criar esta classe
Usando a classe acima com referência à resposta de Judah Himango
Terceiro, você precisa criar o objeto da classe acima e usar o
ConvertHtml(HTMLContent)
método para converter HTML em texto simples em vez deConvertToPlainText(string html);
fonte
Ele tem a limitação de não recolher longos espaços em branco embutidos, mas é definitivamente portátil e respeita o layout como o navegador da web.
fonte
Não existe um método com o nome 'ConvertToPlainText' no HtmlAgilityPack, mas você pode converter uma string html em string CLEAR com:
Isso funciona para mim. MAS NÃO ENCONTREI UM MÉTODO COM O NOME 'ConvertToPlainText' EM 'HtmlAgilityPack'.
fonte
Acho que a maneira mais fácil é fazer um método de extensão de 'string' (com base no que o usuário Richard sugeriu):
Em seguida, use este método de extensão em qualquer variável 'string' em seu programa:
Eu uso este método de extensão para converter comentários formatados em html em texto simples para que sejam exibidos corretamente em um Crystal Report e funciona perfeitamente!
fonte
A maneira mais simples que encontrei:
A classe HtmlFilter está localizada em Microsoft.TeamFoundation.WorkItemTracking.Controls.dll
A dll pode ser encontrada em uma pasta como esta:% ProgramFiles% \ Common Files \ microsoft shared \ Team Foundation Server \ 14.0 \
No VS 2015, a dll também requer referência a Microsoft.TeamFoundation.WorkItemTracking.Common.dll, localizado na mesma pasta.
fonte
Se você tiver dados com tags HTML e quiser exibi-los para que uma pessoa possa VER as tags, use HttpServerUtility :: HtmlEncode.
Se você tiver dados com tags HTML e quiser que o usuário veja as tags renderizadas, exiba o texto como está. Se o texto representar uma página da web inteira, use um IFRAME para isso.
Se você tiver dados com tags HTML e desejar remover as tags e apenas exibir o texto não formatado, use uma expressão regular.
fonte
Eu enfrentei problema semelhante e encontrei a melhor solução. O código abaixo funciona perfeitamente para mim.
}
Caracteres de escape, como \ n e \ r, tiveram que ser removidos primeiro porque fazem com que as regexes parem de funcionar conforme o esperado.
Além disso, para fazer a string de resultado ser exibida corretamente na caixa de texto, pode ser necessário dividi-la e definir a propriedade Lines da caixa de texto em vez de atribuir à propriedade Text.
this.txtResult.Lines = StripHTML (this.txtSource.Text) .Split ("\ r" .ToCharArray ());
Fonte: https://www.codeproject.com/Articles/11902/Convert-HTML-to-Plain-Text-2
fonte
Depende do que você entende por "html". O caso mais complexo seria páginas da web completas. Isso também é o mais fácil de lidar, já que você pode usar um navegador da Web em modo texto. Consulte o artigo da Wikipedia que lista navegadores da web, incluindo navegadores em modo de texto. Lynx é provavelmente o mais conhecido, mas um dos outros pode ser melhor para suas necessidades.
fonte
Aqui está minha solução:
Exemplo:
fonte
Eu tive a mesma dúvida, só que meu html tinha um layout simples e pré-conhecido, como:
Então, acabei usando um código tão simples:
Quais saídas:
fonte
Não escrevi, mas usando:
fonte
Acho que tem uma resposta simples:
fonte
Para quem procura uma solução exata para a questão do OP para uma abreviação textual de um determinado documento html, sem novas linhas e tags HTML, encontre a solução abaixo.
Como com toda solução proposta, existem algumas suposições com o código abaixo:
he<span>ll</span>o
devem ser impressoshello
. Lista de tags inline: https://www.w3schools.com/htmL/html_blocks.aspConsiderando o acima, a seguinte extensão de string com expressões regulares compiladas produzirá o texto simples esperado em relação aos caracteres html com escape e nulo na entrada nula.
fonte
string pública estática StripTags2 (string html) {return html.Replace ("<", "<"). Replace (">", ">"); }
Com isso, você escapa todos os "<" e ">" em uma string. É isso que voce quer?
fonte