solve error persian xml parse

رفع مشکل Parse کردن کارکتر فارسی XML در اوراکل

 

اگر هنگام خواندن فایل XML و Parse کردن در دیتابیس اوراکل، در صورتیکه شامل کارکترهای فارسی باشد با خطا مواجه شده اید، باید بصورت زیر اقدام کنید.
همانطور که مشاهده میکنید تگ DriverName دارای کارکترهای فارسی می باشد ولی بصورت UTF-8 نیست و به شکل Unicode Hex Character Code است:

<DriverName>&#x622;&#x628; &#x631;&#x648;&#x627;&#x646;</DriverName>

مثال: یک رشته XML


<diffgr:diffgram xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1">
<NewDataSet xmlns="">
<Demoraj diffgr:id="Demoraj1" msdata:rowOrder="0">
<ReleaseNo>94/0052</ReleaseNo>
<ContainerNo>TTNU2913497</ContainerNo>
<DocDate>1394/03/25</DocDate>
<LoadDate>1394/03/25</LoadDate>
<LoadType>3</LoadType>
<LoadNumber>0011111 </LoadNumber>
<DriverName>&#x622;&#x628; &#x631;&#x648;&#x627;&#x646;</DriverName>
<ManifestNo>11111 </ManifestNo>
</Demoraj></NewDataSet>
</diffgr:diffgram>

خطای مشاهده شده در هنگام Parse کردن رشته XML در Oracle:

ORA-31061: XDB error: XML event error
ORA-19202: Error occurred in XML processing
In line 1 of orastream:
LPX-00217: invalid character 1570 (U+0622)

بدلیل اینکه NLS_CHARACTERSET دیتابیس اوراکل شما AR8MSWIN1256 می باشد به خطا برخورد می کنید حال به روش زیر می توانید این خطا را برطرف سازید.
در ابتدا باید رشته XML را در یک BLOB ذخیره و سپس اقدام به خواندن مقدار XML نمایید
مثال:


—if NLS_CHARACTERSET = AR8MSWIN1256 in your database so you must use below code
l_blob := FNC_CLOBTOBLOB (P_XML);
Insert Into TAXML_TEMP (F_XML) Values (XMLTYPE(l_blob,Nls_Charset_Id('UTF-8')));
—if NLS_CHARACTERSET = UTF-8 or AL32UTF8 so you should use below code
Insert Into TAXML_TEMP (F_XML) Values (XMLTYPE(P_XML));

می توانید اسکرپیت جدول و پکیج را از کتابخانه سایت گروه کاربران اوراکل ایران دانلود کنید.

 

Rate this post

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

این قسمت نباید خالی باشد
این قسمت نباید خالی باشد
لطفاً یک نشانی ایمیل معتبر بنویسید.

keyboard_arrow_up
Oracle APEX Capabilities (OAC)