Saya punya data di SQL Server 2005 yang berisi tag html dan saya ingin menghapus semua itu, meninggalkan hanya teks di antara tag. Idealnya juga mengganti hal-hal seperti <
dengan<
, dll.
Apakah ada cara mudah untuk melakukan ini atau apakah seseorang sudah mendapatkan beberapa contoh kode t-sql?
Saya tidak memiliki kemampuan untuk menambahkan procs tersimpan yang diperpanjang dan sejenisnya, jadi saya lebih memilih pendekatan t-sql murni (lebih disukai yang kompatibel dengan sql 2000).
Saya hanya ingin mengambil data dengan html yang telah dilucuti, bukan memperbaruinya, jadi idealnya itu akan ditulis sebagai fungsi yang ditentukan pengguna, agar mudah digunakan kembali.
Jadi misalnya mengubah ini:
<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>
untuk ini:
Some useful text > more text
CHAR(13) + CHAR(10)
dalam dua bagian yang memiliki ini. Cukup halus saya tidak menangkapnya sampai melebihi panjang bidang pendek (menarik, dan diperlukan bagi saya, semua penggantian lebih pendek dari string aslinya).Berasal dari jawaban @Goner Doug, dengan beberapa hal yang diperbarui:
- menggunakan REPLACE jika memungkinkan
- konversi entitas yang telah ditentukan sebelumnya seperti
é
(saya memilih yang saya butuhkan :-)- beberapa konversi tag daftar
<ul> and <li>
sumber
<
dan>
sampai akhir. Jika tidak, mereka akan dihapus dengan tag.Jika HTML Anda terbentuk dengan baik, saya pikir ini adalah solusi yang lebih baik:
sumber
Berikut adalah versi terbaru dari fungsi ini yang menggabungkan jawaban RedFilter (asli Pinal) dengan penambahan LazyCoders dan koreksi kesalahan ketik yang bagus DAN tambahan saya sendiri untuk menangani
<STYLE>
tag sebaris di dalam HTML.sumber
STUFF()
alih-alihREPLACE()
(yang akan menjadi IMO lebih pendek)?Ini bukan solusi baru yang lengkap tetapi koreksi untuk solusi afwebservant :
sumber
Coba ini. Ini adalah versi modifikasi dari yang diposting oleh RedFilter ... SQL ini menghapus semua tag kecuali BR, B, dan P dengan atribut yang menyertainya:
sumber
Bagaimana jika menggunakan XQuery dengan satu liner:
Ini mengulang semua elemen dan mengembalikan teks () saja.
Untuk menghindari teks di antara elemen yang digabungkan tanpa spasi, gunakan:
Dan untuk menanggapi "Bagaimana Anda menggunakan ini untuk kolom:
Untuk kode di atas, pastikan Anda
html_column
adalah tipe dataxml
, jika tidak, Anda perlu menyimpan html versi cast sebagaixml
. Saya akan melakukan ini sebagai latihan terpisah ketika Anda memuat data HTML, karena SQL akan membuat kesalahan jika menemukan xml dalam format yang salah, misalnya tag awal / akhir tidak cocok, karakter tidak valid.Ini sangat bagus saat Anda ingin membuat frasa pencarian, menghapus HTML, dll.
Perhatikan bahwa ini mengembalikan tipe xml, jadi CAST atau COVERT ke teks jika sesuai. Versi xml dari tipe data ini tidak berguna, karena ini bukan XML yang dibentuk dengan baik.
sumber
data
dengan kolom yang disebuthtml
dan saya ingin memilih semua nilai di kolom itu tetapi menghapus tag html bagaimana saya bisa menggunakan jawaban Anda untuk mencapai itu?Ini adalah versi yang tidak memerlukan UDF dan berfungsi meskipun HTML berisi tag tanpa mencocokkan tag penutup.
sumber
Sementara jawaban Arvin Amir mendekati solusi satu baris penuh, Anda dapat mampir di mana saja; dia mendapat sedikit bug dalam pernyataan pilihnya (kehilangan akhir baris), dan saya ingin menangani referensi karakter yang paling umum.
Apa yang akhirnya saya lakukan adalah ini:
Tanpa kode referensi karakter, dapat disederhanakan menjadi ini:
sumber
Kode Patrick Honorez perlu sedikit perubahan.
Ini mengembalikan hasil yang tidak lengkap untuk html yang berisi
<
atau>
Ini karena kode di bawah bagian tersebut
sebenarnya akan menggantikan <> menjadi tidak ada. Cara mengatasinya adalah dengan menerapkan dua baris di bawah ini di akhir:
sumber