首页 > 解决方案 > 将 VARCHAR 转换为 XML,包括 < (<) , > (>)

问题描述

我正在以 XML 格式读取 HTML 数据。但由于某些特殊字符,我无法做到这一点。

这是我最初的问题: Using SQL read html data as XML

;WITH CTE AS
 (
 select 1 AS NUM ,'<BODY><TD> values = 100 </TD></BODY>' AS TES
 union
 select 2,'<BODY><TD>  values  < 100 </TD></BODY>'
 )
 select NUM
 , CAST(TES AS XML)
 from CTE

我收到 XML 解析错误。我无法替换所有 < & > 字符,因为我需要使用该标签进行遍历。

XML parsing: line 1, character 22, illegal qualified name character

你能帮我解决这个问题吗?

我发现使用正则表达式我可以做到这一点。谁能帮我为此创建正则表达式?TSQL 演示中的正则表达式: dbo.RegexReplace

标签: sqlsql-serverregexxmltsql

解决方案


XML 非常严格。我怀疑,在纯 html 中使用裸体 <也是一个好主意,但这似乎可行......

如果您的文本始终位于<td>标签之间(并且中间没有其他标签),您可能会尝试使用字符串替换将损坏的数据推送到一个CDATA部分中。

试试看...

;WITH CTE AS
 (
 select 1 AS NUM ,'<BODY><TD> values = 100 </TD></BODY>' AS TES
 union
 select 2,'<BODY><TD>  values  < 100 </TD></BODY>'
 )
 ,replaced AS
 (
    SELECT NUM 
          ,REPLACE(REPLACE(TES,'<TD>','<TD><![CDATA['),'</TD>',']]></TD>') AS TES_new 
    FROM cte
 )
 select NUM
 , CAST(TES_new AS XML)
 from replaced;

这将隐式替换所有禁用字符...


推荐阅读