如何在 T-SQL 中转义 XML 字符串中的属性中的双引号?

非常简单的问题-我有一个属性,我想有双引号。我怎么才能摆脱他们?我试过了

  • \"
  • ""
  • \\"

我已经为所有这些变量设置了 xml 类型和 varchar (max)的@xml 变量。

 declare @xml xml --(or varchar(max) tried both)


set @xml = '<transaction><item value="hi "mom" lol"
ItemId="106"  ItemType="2"  instanceId="215923801"  dataSetId="1" /></transaction>'


declare @xh int
exec sp_xml_preparedocument @xh OUTPUT, @xml


insert into @commits --I declare the table, just removed it for brevity
select
x.*
from openxml(@xh,'/transaction/item')
WITH (
dataItemId int,
dataItemType int,
instanceId int,
dataSetId int,
value varchar(max)
) x
213467 次浏览

那不就是 xml 中的 &quot;吗。

"hi &quot;mom&quot; lol"

* * 编辑: * * 测试; 工作良好:

declare @xml xml


set @xml = '<transaction><item value="hi &quot;mom&quot; lol"
ItemId="106"  ItemType="2"  instanceId="215923801"  dataSetId="1" /></transaction>'


select @xml.value('(//item/@value)[1]','varchar(50)')

TSql 用另一个双引号转义一个双引号。因此,如果希望它成为 sql 字符串文字的一部分,可以这样做:

declare @xml xml
set @xml = "<transaction><item value=""hi"" /></transaction>"

如果希望在 xml 本身的 价值中包含引号,可以使用一个实体,如下所示:

declare @xml xml
set @xml = "<transaction><item value=""hi &quot;mom&quot; lol"" /></transaction>"

在 Jelly.core 中,测试一个字符串的方法是:

&lt;core:when test="${ name == 'ABC' }"&gt;

但如果我必须检查字符串“玩具反斗城”:

&lt;core:when test="${ name == &amp;quot;Toy&apos;s R Us&amp;quot; }"&gt;

如果内部允许双引号,就会是这样:

&lt;core:when test="${ name == "Toy's R Us" }"&gt;

不能再评论了,但是投票通过了。我想让大家知道,在 Solr,当为 regexformer 构建 regex 表达式时,使用 xml 配置文件时,&quot;工作得非常好,比如: 使用转义版本而不是双引号的 regex=".*img src=&quot;(.*)&quot;.*"