У меня есть данные в SQL Server 2005, которые содержат теги html, и я хотел бы удалить все это, оставив только текст между тегами. В идеале также замена таких вещей, как <
на <
и т. Д.
Есть ли простой способ сделать это или у кого-то уже есть образец кода t-sql?
У меня нет возможности добавлять расширенные хранимые процессы и тому подобное, поэтому я бы предпочел чистый подход t-sql (предпочтительно тот, который обратно совместим с sql 2000).
Я просто хочу получить данные с вырезанным html, а не обновлять его, поэтому в идеале он должен быть написан как определяемая пользователем функция, чтобы упростить повторное использование.
Так, например, преобразовав это:
<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>
к этому:
Some useful text > more text
CHAR(13) + CHAR(10)
двух разделов, в которых они есть. Достаточно тонко, я не улавливал этого, пока он не превысил длину короткого поля (что интересно, и это необходимо для меня, все замены короче исходной строки).Получено из ответа @Goner Doug, с некоторыми обновленными вещами:
- используя REPLACE, где это возможно
- преобразование предопределенных сущностей, например
é
(я выбрал те, которые мне нужны :-)- некоторое преобразование тегов списка
<ul> and <li>
источник
<
и>
до самого конца. В противном случае они были удалены вместе с тегами.Если ваш HTML правильно сформирован, я думаю, что это лучшее решение:
источник
Вот обновленная версия этой функции, которая включает ответ RedFilter (оригинал Pinal) с дополнениями LazyCoders и исправлениями опечаток goodeye И моим собственным дополнением для обработки встроенных
<STYLE>
тегов внутри HTML.источник
STUFF()
вместоREPLACE()
(что будет намного короче IMO)?Это не полностью новое решение, а поправка для решения afwebservant :
источник
Попробуй это. Это модифицированная версия той, что была опубликована RedFilter ... этот SQL удаляет все теги, кроме BR, B и P, с любыми сопутствующими атрибутами:
источник
Как насчет использования XQuery с однострочником:
Это перебирает все элементы и возвращает только text ().
Чтобы текст между элементами не объединялся без пробелов, используйте:
И чтобы ответить на вопрос "Как это использовать для столбца:
Для приведенного выше кода убедитесь, что ваш
html_column
тип данныхxml
, если нет, вам нужно сохранить приведенную версию html какxml
. Я бы сделал это как отдельное упражнение, когда вы загружаете данные HTML, так как SQL выдаст ошибку, если обнаружит искаженный xml, например, несовпадающие начальные / конечные теги, недопустимые символы.Они отлично подходят для создания поисковых фраз, удаления HTML и т. Д.
Просто обратите внимание, что это возвращает тип xml, поэтому CAST или COVERT в текст, где это необходимо. XML-версия этого типа данных бесполезна, так как это не правильно сформированный XML.
источник
data
столбца,html
и я хочу выбрать все значения в этом столбце, но удалить теги html, как я могу использовать ваш ответ для этого?Вот версия, которая не требует UDF и работает, даже если HTML содержит теги без соответствующих закрывающих тегов.
источник
Хотя ответ Арвина Амира близок к полному однострочному решению, к которому вы можете обратиться где угодно; у него небольшая ошибка в его операторе выбора (отсутствует конец строки), и я хотел обработать наиболее распространенные ссылки на символы.
В итоге я сделал следующее:
Без ссылочного кода символа это можно упростить до следующего:
источник
Код Патрика Хонореза нуждается в небольшом изменении.
Он возвращает неполные результаты для HTML, содержащего
<
или>
Это потому, что код под разделом
фактически заменит <> ничем. Исправление заключается в применении следующих двух строк в конце:
источник