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

Posted

技术标签:

【中文标题】如何在 T-SQL 中的 XML 字符串中的属性中转义双引号?【英文标题】:How do I escape double quotes in attributes in an XML String in T-SQL? 【发布时间】:2010-10-13 15:26:35 【问题描述】:

非常简单的问题 - 我有一个属性,我想在其中添加双引号。我该如何转义它们?我试过了

\" "" \\"

我已经为它们都设置了 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

【问题讨论】:

顺便说一句......这里没有理由(AFAIK)使用openxml......那是“2005年之前”的东西。如果有 xml 值,直接作为 xml 使用。 马克-谢谢。我有另一个最终成为 openxml 的错误被大撇号破坏:'我想我会把它作为问题/答案发布给谷歌。 【参考方案1】:

那不是 xml 中的 &amp;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)')

【讨论】:

【参考方案2】:

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

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

如果您想在 xml 本身的 value 中包含引号,请使用如下所示的实体:

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

【讨论】:

最好不要使用双引号作为 SQL 字符串分隔符。单引号是 ANSI 标准并且始终有效,无论 QUOTED_IDENTIFIER 设置如何。 同意,但我想证明这是可能的,以防他试图做的事情有任何混淆。【参考方案3】:

在 Jelly.core 中测试一个可以使用的文字字符串:

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

但如果我必须检查字符串“Toy's R Us”:

&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; 

【讨论】:

【参考方案4】:

不能再发表评论,但投了赞成票,想让人们知道&amp;quot; 在 Solr 中为 RegexTransformer 形成正则表达式时非常适用于 xml 配置文件,如下所示:regex=".*img src=&amp;quot;(.*)&amp;quot;.*" 使用转义版本而不是 double-引号。

【讨论】:

以上是关于如何在 T-SQL 中的 XML 字符串中的属性中转义双引号?的主要内容,如果未能解决你的问题,请参考以下文章

T-SQL,从列中的xml获取值

如何删除 xml 文档中的独立属性声明?

T-SQL 转义select …. like中的特殊字符(百分号)

如何使用java让XML节点中的属性换行?如下所示!

更新中的 T-SQL 字符串替换

如何将 XML 属性值添加到包含对象的字典中