Как избежать двойных кавычек в атрибутах в строке XML в T-SQL?

довольно простой вопрос-у меня есть атрибут, в котором я хотел бы иметь двойные кавычки. Как мне избежать их? Я пытался

  • "
  • ""
  • \"

и я сделал переменную @xml как xml type, так и 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

4 ответов


не будет &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)')

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>"

больше не могу комментировать, но проголосовал и хотел, чтобы люди знали, что &quot; очень хорошо работает для файлов конфигурации xml при формировании выражений regex для RegexTransformer в Solr следующим образом:regex=".*img src=&quot;(.*)&quot;.*" использование экранированной версии вместо двойных кавычек.


В Желе.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;