如何在 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 中的 &quot;
吗?即
"hi "mom" lol"
**编辑:**测试;工作正常:
declare @xml xml
set @xml = '<transaction><item value="hi "mom" 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 "mom" lol"" /></transaction>"
【讨论】:
最好不要使用双引号作为 SQL 字符串分隔符。单引号是 ANSI 标准并且始终有效,无论 QUOTED_IDENTIFIER 设置如何。 同意,但我想证明这是可能的,以防他试图做的事情有任何混淆。【参考方案3】:在 Jelly.core 中测试一个可以使用的文字字符串:
<core:when test="$ name == 'ABC' ">
但如果我必须检查字符串“Toy's R Us”:
<core:when test="$ name == &quot;Toy's R Us&quot; ">
如果里面允许使用双引号,会是这样的:
<core:when test="$ name == "Toy's R Us" ">
【讨论】:
【参考方案4】:不能再发表评论,但投了赞成票,想让人们知道&quot;
在 Solr 中为 RegexTransformer 形成正则表达式时非常适用于 xml 配置文件,如下所示:regex=".*img src=&quot;(.*)&quot;.*"
使用转义版本而不是 double-引号。
【讨论】:
以上是关于如何在 T-SQL 中的 XML 字符串中的属性中转义双引号?的主要内容,如果未能解决你的问题,请参考以下文章