CAST VARCHAR в XML, включая <(<),> (>) - PullRequest
0 голосов
/ 07 сентября 2018

Я читаю данные HTML как XML. Но из-за какого-то специального символа я не могу это сделать.

Вот мой оригинальный вопрос: Использование SQL для чтения html-данных как 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

1 Ответ

0 голосов
/ 08 сентября 2018

XML очень строгий. Я сомневаюсь, что было бы неплохо использовать naked < в чистом 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;

Это заменит все запрещенные символы неявно ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...