Tengo datos en SQL Server 2005 que contienen etiquetas html y me gustaría eliminar todo eso, dejando solo el texto entre las etiquetas. Idealmente, también reemplazando cosas como <
por <
, etc.
¿Existe una manera fácil de hacer esto o alguien ya tiene un código t-sql de muestra?
No tengo la capacidad de agregar procesos almacenados extendidos y similares, por lo que preferiría un enfoque t-sql puro (preferiblemente uno compatible con versiones anteriores de sql 2000).
Solo quiero recuperar los datos con html eliminado, no actualizarlo, por lo que lo ideal sería que se escribiera como una función definida por el usuario, para facilitar su reutilización.
Entonces, por ejemplo, convirtiendo esto:
<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>
a esto:
Some useful text > more text
CHAR(13) + CHAR(10)
en dos de las secciones que las tienen. Lo suficientemente sutil, no lo capté hasta que excedió la longitud de un campo corto (curiosamente, y requerido para mí, todos los reemplazos son más cortos que la cadena original).Derivado de la respuesta de @Goner Doug, con algunas cosas actualizadas:
- usando REPLACE donde sea posible
- conversión de entidades predefinidas como
é
(elegí las que necesitaba :-)- alguna conversión de etiquetas de lista
<ul> and <li>
fuente
<
y>
hasta el final. De lo contrario, se eliminaron con las etiquetas.Si su HTML está bien formado, creo que esta es una mejor solución:
fuente
Aquí hay una versión actualizada de esta función que incorpora la respuesta de RedFilter (original de Pinal) con las adiciones de LazyCoders y las correcciones de errores tipográficos de goodeye Y mi propia adición para manejar
<STYLE>
etiquetas en línea dentro del HTML.fuente
STUFF()
lugar deREPLACE()
(cuál sería mucho más corto en mi opinión)?Esta no es una solución completamente nueva, sino una corrección para la solución de afwebservant :
fuente
Prueba esto. Es una versión modificada de la publicada por RedFilter ... este SQL elimina todas las etiquetas excepto BR, B y P con los atributos que las acompañan:
fuente
¿Qué tal usar XQuery con una sola línea?
Esto recorre todos los elementos y devuelve solo el texto ().
Para evitar que el texto entre elementos se concatene sin espacios, use:
Y para responder a "¿Cómo se usa esto para una columna?
Para el código anterior, asegúrese de que
html_column
sea del tipo de datosxml
; de lo contrario, debe guardar una versión del html comoxml
. Haría esto como un ejercicio separado cuando esté cargando datos HTML, ya que SQL arrojará un error si encuentra xml con formato incorrecto, por ejemplo, etiquetas de inicio / final no coincidentes, caracteres no válidos.Son excelentes para cuando desee crear frases de búsqueda, eliminar HTML, etc.
Solo tenga en cuenta que esto devuelve el tipo xml, por lo que CAST o COVERT al texto cuando corresponda. La versión xml de este tipo de datos es inútil, ya que no es un XML bien formado.
fuente
data
con una columna llamadahtml
y quiero seleccionar todos los valores en esa columna pero quitar las etiquetas html, ¿cómo podría usar su respuesta para lograr eso?Aquí hay una versión que no requiere una UDF y funciona incluso si el HTML contiene etiquetas sin etiquetas de cierre coincidentes.
fuente
Si bien la respuesta de Arvin Amir se acerca a una solución completa de una línea, puede ir a cualquier lugar; tiene un pequeño error en su declaración de selección (falta el final de la línea), y quería manejar las referencias de caracteres más comunes.
Lo que terminé haciendo fue esto:
Sin el código de referencia de caracteres, se puede simplificar a esto:
fuente
El código de Patrick Honorez necesita un ligero cambio.
Devuelve resultados incompletos para html que contiene
<
o>
Esto se debe a que el código debajo de la sección
de hecho reemplazará el <> a nada. La solución es aplicar las dos líneas siguientes al final:
fuente