1. ホーム
  2. xml

[解決済み] T-SQLでXML文字列の属性にある二重引用符をエスケープするにはどうすればよいですか?

2022-04-22 21:15:01

質問

簡単な質問ですが、ある属性に二重引用符を付けたいのです。 どのようにエスケープすればよいのでしょうか? 試してみたところ

  • \୧⃛(๑⃙⃘◡̈๑⃙⃘)
  • ""
  • \\ʕ-̫͡-ʔ

そして、@xml変数をxml型とvarchar(max)の両方にして、全てに対応させています。

 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

解決方法は?

とはならないのでしょうか? &quot; をxmlで表現すると、次のようになります。

"hi &quot;mom&quot; lol" 

**edit: ** テスト済み; 問題なく動作します。

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)')