Fala galera!
Tudo bem com vocês? Espero que sim, hein!
Neste post, vou demonstrar pra vocês como converter uma string HTML para texto (Remover tags HTML) utilizando o CLR (C#). Se você é novo aqui no blog ou nunca ouviu falar de CLR ou não sabe como criar seu primeiro projeto utilizando esta poderosa ferramenta do SQL Server, que permite criar códigos em C# ou VB.NET e executá-los pelo banco de dados, dê uma lista no post Introdução ao SQL CLR (Common Language Runtime) no SQL Server.
Em 2014, eu fiz o post Removendo tags HTML de uma string no SQL Server e por isso, você deve estar se perguntando: “Dirceu, se você já fez um post sobre isso, porquê fazer outro igual utilizando o CLR?” e a resposta para isso é muito simples: Código muito mais simples e PERFORMANCE! Como já expliquei no post SQL Server – Comparação de performance entre Scalar Function e CLR Scalar Function, funções CLR geralmente entregam uma performance MUITO superior a funções UDF T-SQL, chegando a ser até 200 vezes mais rápido.
Código-utilizado para a criação dos registros:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
IF (OBJECT_ID('dirceuresende.dbo.Teste_HTML') IS NOT NULL) DROP TABLE dirceuresende.dbo.Teste_HTML CREATE TABLE dirceuresende.dbo.Teste_HTML ( texto VARCHAR(MAX) ) GO INSERT INTO dirceuresende.dbo.Teste_HTML SELECT '<!DOCTYPE html> <html> <body> <h1>My First Heading</h1> <p>My first paragraph.</p> </body> </html>' AS texto FROM sys.objects GO 40 |
Para demonstrar a diferença de performance das duas funções, populei uma tabela com apenas 6.000 registros, todos com a mesma string contendo um código HTML básico. E quanto maior o volume de dados, maior será a diferença de performance entre as funções CLR e UDF T-SQL. O resultado vocês podem conferir abaixo:
Código-fonte da função:
Para remover as tags HTML, utilizo o método HtmlDecode da classe WebUtility, que pertence à biblioteca System.Net. Esse método está disponÃvel apenas a partir do .NET Framework 4.0 e por isso, só é possÃvel utilizá-lo no SQL Server 2012 ou superiores (as versões 2005 e 2008 do SQL Server utilizam o .NET Framework 3.5)
O parâmetro Fl_Quebra_Linha serve para substituir a tag <br> (e suas variantes) por uma quebra de linha no texto. Caso você informe o valor 0 (false) nesse parâmetro, as quebras de linha serão substituídas por uma string vazia.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
using System; using System.Net; using System.Text.RegularExpressions; public partial class UserDefinedFunctions { [Microsoft.SqlServer.Server.SqlFunction] public static string fncRemove_Html_String(string Ds_String_HTML, bool Fl_Quebra_Linha) { if (string.IsNullOrEmpty(Ds_String_HTML)) return null; var html = Ds_String_HTML; html = WebUtility.HtmlDecode(html); if (Fl_Quebra_Linha) { html = Regex.Replace(html, "<br\/>", Environment.NewLine, RegexOptions.IgnoreCase); html = Regex.Replace(html, "<br \/>", Environment.NewLine, RegexOptions.IgnoreCase); html = Regex.Replace(html, "<br>", Environment.NewLine, RegexOptions.IgnoreCase); } html = Regex.Replace(html, " ", " ", RegexOptions.IgnoreCase); html = Regex.Replace(html, "<.*?>", string.Empty); return html; } } |
And that's it, folks!
Espero que tenham gostado do post e até o próximo.
sql server converter convert string text html remover remove tags html para texto plain text
sql server converter convert string text html remover remove tags html para texto plain text