2014-10-30 82 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>