J'ai des données dans SQL Server 2005 qui contiennent des balises html et j'aimerais supprimer tout cela, ne laissant que le texte entre les balises. Idéalement, remplacer également des éléments tels que <
par <
, etc.
Existe-t-il un moyen simple de le faire ou quelqu'un a-t-il déjà un exemple de code t-sql?
Je n'ai pas la possibilité d'ajouter des procs stockés étendus, etc.
Je veux juste récupérer les données avec du HTML dépouillé, ne pas les mettre à jour, donc idéalement, elles seraient écrites comme une fonction définie par l'utilisateur, pour faciliter la réutilisation.
Donc, par exemple, convertir ceci:
<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>
pour ça:
Some useful text > more text
CHAR(13) + CHAR(10)
dans deux des sections qui les contiennent. Assez subtil, je ne l'ai pas attrapé jusqu'à ce qu'il dépasse la longueur d'un champ court (chose intéressante, et nécessaire pour moi, tous les remplacements sont plus courts que la chaîne d'origine).Dérivé de la réponse de @Goner Doug, avec quelques éléments mis à jour:
- en utilisant REPLACE si possible
- la conversion d'entités prédéfinies comme
é
(j'ai choisi celles dont j'avais besoin :-)- une conversion des balises de liste
<ul> and <li>
la source
<
et>
jusqu'à la toute fin. Sinon, ils ont été supprimés avec les balises.Si votre HTML est bien formé, je pense que c'est une meilleure solution:
la source
Voici une version mise à jour de cette fonction qui intègre la réponse RedFilter (l'original de Pinal) avec les ajouts LazyCoders et les corrections de faute de frappe ET mon propre ajout pour gérer les
<STYLE>
balises en ligne dans le HTML.la source
STUFF()
au lieu deREPLACE()
(quelle serait la plus courte IMO)?Ce n'est pas une nouvelle solution complète mais une correction pour la solution d' afwebservant :
la source
Essaye ça. C'est une version modifiée de celle publiée par RedFilter ... ce SQL supprime toutes les balises sauf BR, B et P avec tous les attributs associés:
la source
Que diriez-vous d'utiliser XQuery avec une seule ligne:
Cela parcourt tous les éléments et renvoie uniquement le texte ().
Pour éviter la concaténation du texte entre les éléments sans espaces, utilisez:
Et pour répondre à "Comment utilisez-vous ceci pour une colonne:
Pour le code ci-dessus, assurez-vous que votre
html_column
est de type de donnéesxml
, sinon, vous devez enregistrer une version castée du html sousxml
. Je ferais cela comme un exercice séparé lorsque vous chargez des données HTML, car SQL lancera une erreur s'il trouve du xml mal formé, par exemple des balises de début / fin incompatibles, des caractères invalides.Ceux-ci sont excellents lorsque vous souhaitez créer des phrases Seachh, supprimer du HTML, etc.
Notez simplement que cela renvoie le type xml, donc CAST ou COVERT en texte le cas échéant. La version xml de ce type de données est inutile, car il ne s'agit pas d'un XML bien formé.
la source
data
avec une colonne appeléehtml
et que je veux sélectionner toutes les valeurs de cette colonne mais supprimer les balises html, comment pourrais-je utiliser votre réponse pour y parvenir?Voici une version qui ne nécessite pas d'UDF et fonctionne même si le HTML contient des balises sans balises de fermeture correspondantes.
la source
Alors que la réponse d'Arvin Amir se rapproche d'une solution complète en une seule ligne, vous pouvez déposer n'importe où; il a un léger bogue dans son instruction select (il manque la fin de la ligne), et je voulais gérer les références de caractères les plus courantes.
Ce que j'ai fini par faire, c'est ceci:
Sans le code de référence de caractère, cela peut être simplifié:
la source
Le code de Patrick Honorez a besoin d'un léger changement.
Il renvoie des résultats incomplets pour le code HTML contenant
<
ou>
C'est parce que le code sous la section
remplacera en fait le <> à rien. Le correctif consiste à appliquer les deux lignes ci-dessous à la fin:
la source