在我的数据集中,我有一个字段,用于存储用HTML标记的文本。通用格式如下:
<html><head></head><body><p>My text.</p></body></html>
我可以尝试通过以下方法解决问题:
REPLACE(REPLACE(Table.HtmlData, '<html><head></head><body><p>', ''), '</p></body></html>')
但是,这不是严格的规则,因为 某些条目违反了W3C标准, 并且不包含<head>标签。更糟的是, 可能会缺少结束标记 。因此,我需要REPLACE为每个可能存在的开始和结束标记包括函数。
<head>
REPLACE
REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE( Table.HtmlData, '<html>', ''), '</html>', ''), '<head>', ''), '</head>', ''), '<body>', ''), '</body>', ''), '<p>', ''), '</p>', '')
我想知道是否有比使用多个嵌套REPLACE函数更好的方法来完成此任务。不幸的是,我在这种环境中只能使用的语言是SQL和Visual Basic(不是.NET)。
DECLARE @x XML = '<html><head></head><body><p>My text.</p></body></html>' SELECT t.c.value('.', 'NVARCHAR(MAX)') FROM @x.nodes('*') t(c)
更新-对于带有未关闭标签的字符串:
DECLARE @x NVARCHAR(MAX) = '<html><head></head><body><p>My text.<br>More text.</p></body></html>' SELECT x.value('.', 'NVARCHAR(MAX)') FROM ( SELECT x = CAST(REPLACE(REPLACE(@x, '>', '/>'), '</', '<') AS XML) ) r