Tenho dados no SQL Server 2005 que contém tags html e gostaria de eliminar tudo isso, deixando apenas o texto entre as tags. Idealmente também substituir coisas como <
com <
, etc.
Existe uma maneira fácil de fazer isso ou alguém já tem algum código t-sql de amostra?
Eu não tenho a capacidade de adicionar procs armazenados estendidos e similares, então preferiria uma abordagem t-sql pura (de preferência uma compatível com versões anteriores do sql 2000).
Eu só quero recuperar os dados com html retirado, não atualizá-los, então o ideal seria que fosse escrito como uma função definida pelo usuário, para facilitar a reutilização.
Então, por exemplo, convertendo isso:
<B>Some useful text</B>
<A onclick="return openInfo(this)"
href="http://there.com/3ce984e88d0531bac5349"
target=globalhelp>
<IMG title="Source Description" height=15 alt="Source Description"
src="/ri/new_info.gif" width=15 align=top border=0>
</A>> <b>more text</b></TD></TR>
para isso:
Some useful text > more text
CHAR(13) + CHAR(10)
em duas das seções que os possuem. Sutil o suficiente, não peguei até que ultrapassasse o comprimento de um campo curto (curiosamente, e obrigatório para mim, todas as substituições são mais curtas do que a corda original).Derivado da resposta de @Goner Doug, com algumas coisas atualizadas:
- usando REPLACE onde possível
- conversão de entidades predefinidas como
é
(eu escolhi as que precisava :-)- alguma conversão de tags de lista
<ul> and <li>
fonte
<
e>
até o final. Caso contrário, eles foram removidos com as tags.Se o seu HTML estiver bem formado, acho que esta é uma solução melhor:
fonte
Aqui está uma versão atualizada desta função que incorpora a resposta RedFilter (original de Pinal) com as adições LazyCoders e as correções de erros de digitação E minha própria adição para lidar com
<STYLE>
tags in-line dentro do HTML.fonte
STUFF()
vez deREPLACE()
(que seria muito mais curto IMO)?Esta não é uma nova solução completa, mas uma correção para a solução do afwebservant :
fonte
Experimente isso. É uma versão modificada do postado por RedFilter ... este SQL remove todas as tags, exceto BR, B e P com quaisquer atributos que os acompanham:
fonte
Que tal usar XQuery com um liner:
Isso percorre todos os elementos e retorna apenas o texto ().
Para evitar que o texto entre os elementos se concatenem sem espaços, use:
E para responder a "Como você usa isso para uma coluna:
Para o código acima, certifique-
html_column
se de ser do tipo de dadosxml
, caso contrário, você precisa salvar uma versão fundida do html comoxml
. Eu faria isso como um exercício separado quando você estiver carregando dados HTML, pois o SQL lançará um erro se encontrar xml malformado, por exemplo, tags de início / fim incompatíveis, caracteres inválidos.Eles são excelentes para quando você deseja criar frases de pesquisa, remover HTML, etc.
Apenas observe que isso retorna o tipo xml, então CAST ou COVERT para texto quando apropriado. A versão xml deste tipo de dados é inútil, pois não é um XML bem formado.
fonte
data
com uma coluna chamadahtml
e desejo selecionar todos os valores dessa coluna, mas remover as tags html, como eu poderia usar sua resposta para conseguir isso?Esta é uma versão que não requer um UDF e funciona mesmo se o HTML contiver tags sem tags de fechamento correspondentes.
fonte
Embora a resposta de Arvin Amir chegue perto de uma solução completa de uma linha, você pode entrar em qualquer lugar; ele tem um pequeno bug em sua instrução select (faltando o final da linha), e eu queria lidar com as referências de personagem mais comuns.
O que acabei fazendo foi isso:
Sem o código de referência de caractere, ele pode ser simplificado para:
fonte
O código de Patrick Honorez precisa de uma pequena mudança.
Ele retorna resultados incompletos para html que contém
<
ou>
Isso ocorre porque o código abaixo da seção
irá de fato substituir o <> por nada. A solução é aplicar as duas linhas abaixo no final:
fonte