2014-10-30 78 views
0

我有一个简单的页面,它创建一个搜索数据的XML字符串并将其发送到我的存储过程。从那里,我解析它并做我需要做的任何事情。TSQL用特殊字符发送XML

问题是,我传递的其中一个值可能包含ampersand (&)符号。

这是我的XML的例子:

<root> 
    <locations> 
     <location> 
     <selectedLocation>Chandler</selectedLocation> 
     </location> 
    </locations> 
    <areas> 
     <area> 
     <selectedArea>Customer Solutions</selectedArea> 
     </area> 
    </areas> 
    <departments> 
     <department> 
     <selectedDepartment>Settings & Payments's</selectedDepartment> 
     </department> 
    </departments> 
    <source /> 
</root> 

我怎样才能得到这正确地传递为&导致与它是有效的问题。

我在做一些研究,我相信CDATA只用于做相反的事;从数据库中拉出来。

想法如何让这个正确传递?

回答

0

你需要躲避符号字符&像这样:&amp;

+0

但随后其仍串.. – SBB 2014-10-30 18:35:23

0

我们的base64我们的字符串

-- Encode the string "Settings & Payments's " in Base64 to get "U2V0dGluZ3MgJiBQYXltZW50cydz" 
SELECT Base64Encoding = CAST(N'' AS XML).value('xs:base64Binary(xs:hexBinary(sql:column("bin")))', 'VARCHAR(MAX)') 
FROM (
    SELECT bin = CAST('Settings & Payments''s' AS VARBINARY(MAX)) 
    ) AS bin_sql_server_temp; 

-- Decode the Base64-encoded string "U2V0dGluZ3MgJiBQYXltZW50cydz=" to get back "Settings & Payments's" 
SELECT 
    CAST(
     CAST(N'' AS XML).value(
      'xs:base64Binary("U2V0dGluZ3MgJiBQYXltZW50cydz")' 
      , 'VARBINARY(MAX)' 
     ) 
     AS VARCHAR(MAX) 
    ) ASCIIEncoding 
; 

所以,那么你的XML看起来像

<root> 
    <locations> 
     <location> 
     <selectedLocation>Chandler</selectedLocation> 
     </location> 
    </locations> 
    <areas> 
     <area> 
     <selectedArea>Customer Solutions</selectedArea> 
     </area> 
    </areas> 
    <departments> 
     <department> 
     <selectedDepartment>U2V0dGluZ3MgJiBQYXltZW50cydz</selectedDepartment> 
     </department> 
    </departments> 
    <source /> 
</root>