رفع مشکل Parse کردن کارکتر فارسی XML در اوراکل
اگر هنگام خواندن فایل XML و Parse کردن در دیتابیس اوراکل، در صورتیکه شامل کارکترهای فارسی باشد با خطا مواجه شده اید، باید بصورت زیر اقدام کنید.
همانطور که مشاهده میکنید تگ DriverName دارای کارکترهای فارسی می باشد ولی بصورت UTF-8 نیست و به شکل Unicode Hex Character Code است:
<DriverName>آب روان</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>آب روان</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));
می توانید اسکرپیت جدول و پکیج را از کتابخانه سایت گروه کاربران اوراکل ایران دانلود کنید.