Eu tenho estrutura XML que é parâmetro de entrada para meu procedimento armazenado . Ele contém elemento com & (que é escapado em XML). Quando eu extraio esse elemento para VARCHAR
eu receber & que não é um caractere XML válido. Eu preciso escapar dele, antes de converter para XML novamente. Como fazer isso sem REPLACE
?
Tenho o seguinte texto: param1=xyz¶2=dasdasdfdas¶m3
. É uma parte da string de consulta. Eu converti XML
e enviei como parte da estrutura XML:
<zzz xmlns="http://example.com">
<aaa>aaa</aaa>
<bbb>param1=xyz&para2=dasdasdfdas&param3</bbb>
</zzz>
Dentro do procedimento armazenado, preciso extraí-lo. Eu faço isso com:
ISNULL(NULLIF(LTRIM(RTRIM(@XMLInput.value('declare default element namespace "http://example.com"; (zzz/bbb)[1]', 'NVARCHAR(250)'))), ''), '');
Depois disso, o valor contém texto normal ( & -s não são escapados - & ).
Depois de algum processamento, preciso colocar essa string dentro de outro XML. Eu faço:
CAST( ... AS XML);
Como & -s não são escapados, recebi um erro.
Use
for xml path
para criar XML em vez de lançar.String vazia na expressão de caminho e a ausência de um alias na coluna retornada retornarão sua string como xml.
Isso é um XML perfeitamente válido. Se você extrair o
bbb
elemento usando o.value
método do tipo de dados XML, ele será desidentificado nesse ponto, por exemploVocê pode extrair e adicionar o elemento sem manipulação ou substituição especial, por exemplo, usando o
.modify
método do tipo de dados XML: