Click here to Skip to main content
15,892,927 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
Hi All,

I have a requirement ,where I can read the XML file and insert/update the table using XML data.

My XML looks little complex ,but i pasted here one node for better understanding

XML
<TRANSLATION_LIST>
            <TRANSLATION>
               <LANG_CODE>EN</LANG_CODE>
               <DESCRIPTION>Consumer Fraud Suspected</DESCRIPTION>
            </TRANSLATION>
            <TRANSLATION>
               <LANG_CODE>HI</LANG_CODE>
               <DESCRIPTION>उपभोक्ता धोखाधड़ी संदिग्ध</DESCRIPTION>
            </TRANSLATION>
            <TRANSLATION>
               <LANG_CODE>RU</LANG_CODE>
               <DESCRIPTION>Обман потребителей Подозреваемый</DESCRIPTION>
            </TRANSLATION>
            <TRANSLATION>
               <LANG_CODE>ZH</LANG_CODE>
               <DESCRIPTION>欺骗消费者嫌疑</DESCRIPTION>
            </TRANSLATION>
         </TRANSLATION_LIST>


Now I can able to read the XML and storing the XML data into temparary table.
But I observed that Description column other than English language is showing like this

/ ???? ????? ??? ???? ????

I tried in with NVarchar but still getting the same issue.
This is the snippet which I am using
SQL
EXEC sp_xml_preparedocument @hDoc OUTPUT, @XML

SELECT LANG_CODE,DESCRIPTION
FROM OPENXML(@hDoc, 'REASON_CODE_EXPORT/REASON_CODE_LIST/REASON_CODE/TRANSLATION_LIST/TRANSLATION')
WITH 
(
   LANG_CODES   nvarchar(50)  'LANG_CODE',
   DESCRIPTION  nvarchar(max) 'DESCRIPTION'
)

EXEC sp_xml_removedocument @hDoc

Could any one please suggest me how to resolve/handle this issue.
Posted
Updated 6-Nov-14 6:06am
v3

1 solution

The following code works for me in SQL 2008 R2:
SQL
-- NB: Using "N" prefix to indicate a Unicode string:
DECLARE @xml xml = N'<translation_list>
    <translation>
        <lang_code>EN</lang_code>
        <description>Consumer Fraud Suspected</description>
    </translation>
    <translation>
        <lang_code>HI</lang_code>
        <description>उपभोक्ता धोखाधड़ी संदिग्ध</description>
    </translation>
    <translation>
        <lang_code>RU</lang_code>
        <description>Обман потребителей Подозреваемый</description>
    </translation>
    <translation>
        <lang_code>ZH</lang_code>
        <description>欺骗消费者嫌疑</description>
    </translation>
</translation_list>';

-- Using sp_xml_preparedocument:
DECLARE @hDoc int;
EXEC sp_xml_preparedocument @hDoc OUTPUT, @XML;
 
SELECT 
    LANG_CODE, 
    DESCRIPTION
FROM 
    OPENXML(@hDoc, 'TRANSLATION_LIST/TRANSLATION')
    WITH
    (
        LANG_CODE nvarchar(50) 'LANG_CODE',
        DESCRIPTION nvarchar(max) 'DESCRIPTION'
   )
;
 
EXEC sp_xml_removedocument @hDoc;

/*
Output:

LANG_CODE       DESCRIPTION
EN              Consumer Fraud Suspected
HI              उपभोक्ता धोखाधड़ी संदिग्ध
RU              Обман потребителей Подозреваемый
ZH              欺骗消费者嫌疑
*/


-- Using XML type methods:
SELECT 
    Node.value('LANG_CODE[1]', 'char(2)') As LANG_CODE,
    Node.value('DESCRIPTION[1]', 'nvarchar(max)') As DESCRIPTION
FROM 
    @xml.nodes('//TRANSLATION') As List (Node)
;

/*
Output:

LANG_CODE       DESCRIPTION
EN              Consumer Fraud Suspected
HI              उपभोक्ता धोखाधड़ी संदिग्ध
RU              Обман потребителей Подозреваемый
ZH              欺骗消费者嫌疑
*/

You might need to check how the XML is being passed to your SQL code, and what data-type you're using to store it.
 
Share this answer
 
Comments
pratap420 10-Nov-14 5:39am    
I am passing the XML file path to Procedure.In procedure i am getting the XML using file path.During this process ,I used varchar instead of Nvarchar .So that am getting this issue.Now I fixed it . Thanks Richard for your valuable suggestion.

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900