在转换为 XML 之前如何在 TSQL 中转义 XML 字符?

Bog*_*nov 6 xml sql-server t-sql type-conversion

我有XML 结构,它是我的存储过程的输入参数。它包含带有& 的元素(在 XML 中转义)。当我提取该元素以VARCHAR接收& 时,它不是有效的 XML 字符。在再次转换为 XML 之前,我需要对其进行转义。如何做到这一点没有REPLACE

我有以下文字:param1=xyz&para2=dasdasdfdas&param3。它是查询字符串的一部分。我将其转换XML并作为 XML 结构的一部分发送:

<zzz xmlns="http://example.com">
  <aaa>aaa</aaa>
  <bbb>param1=xyz&amp;para2=dasdasdfdas&amp;param3</bbb>
</zzz>
Run Code Online (Sandbox Code Playgroud)

在存储过程中,我需要提取它。我这样做:

ISNULL(NULLIF(LTRIM(RTRIM(@XMLInput.value('declare default element namespace "http://example.com"; (zzz/bbb)[1]', 'NVARCHAR(250)'))), ''), '');
Run Code Online (Sandbox Code Playgroud)

之后,该值包含普通文本(& -s 未转义 - &)。

经过一些处理后,我需要将该字符串放入其他 XML 中。我做:

CAST( ... AS XML);

因为& -s 没有转义,所以我出错了。

Mik*_*son 13

使用for xml path创建XML,而不是铸造。

select @YourVariable for xml path(''), type
Run Code Online (Sandbox Code Playgroud)

路径表达式中的空字符串以及返回列上没有别名将使您的字符串返回为 xml。