السلام عليكم و رحمة الله و بركاته :
سأحاول إخواني أن أضع مجموعة أفكار برمجية في T-SQL للتعامل مع الـ XML على التتالي .. وأطلب من كل شخص (مشرف أو عضو) أن المشاركة و النقد لأي كلام مكتوب وذلك لكي ترقى هذه الأفكار إلى المستوى المطلوب .. و تحقق الغرض المطلوب منها و هو الفائدة بإذن الله .
طبعاً توليد ملف Xml سأتكلم عنه لاحقاً بإذن الله و هو يشبه إلى حد كبير .. الموضوع الذي تحدثت عنه في السابق و هو :
تصدير سجلات جدول ما إلى ملف CSV أو ملف نصي
فقط يختلف استعلام جلب البيانات بعبارة الـ Sql قليلاً .. For Xml سأضع إن شاء الله مثال حول هذه الفكرة ..
لكن لدينا اليوم موضوع أجمل الاّن وهو قراء بيانات من ملف XML في الحقيقة قمت بالبحث على مواقع الـ T-SQL ووجدت أكثر من طريقة وسوف أطرح الأسهل بينها و للأسف كاتب الكود التالي واحد إسرئيلي كما يذكر الموقع ولكن نحن نريد الكود لا كاتب الكود .. عسى أن يكون مفيداَ :
Create proc sp_translate_simple_xml (@XMLfile varchar(100)) AS begin declare @idoc int declare @doc varchar(8000) declare @xml_line varchar(200) declare @bulkinscmd varchar(500) set @doc ='' -- insert XML file into temporary table Create table #tempXML (line varchar(8000)) set @bulkinscmd = 'BULK INSERT #tempXML FROM ' + '''' + @XMLfile + '''' exec (@bulkinscmd) DECLARE xml_cursor CURSOR FOR SELECT * FROM #tempXML -- create XML string in SQL SERVER memory OPEN xml_cursor FETCH NEXT FROM xml_cursor INTO @xml_line WHILE @@FETCH_STATUS = 0 BEGIN SET @doc = @doc + rtrim(ltrim(@xml_line)) FETCH NEXT FROM xml_cursor INTO @xml_line END close xml_cursor deallocate xml_cursor -- Select * from #tempXML --To Show the file contents drop table #tempXML --Create an internal representation of the XML document. exec sp_xml_preparedocument @idoc OUTPUT, @doc -- SELECT statement using OPENXML rowset provider SELECT text FROM OPENXML (@idoc, '/ROOT/customer/name') -- will give you the name contents WHERE text is not null EXEC sp_xml_removedocument @idoc END Go
----------------------
-- Test it exec sp_translate_simple_xml 'E:\G.xml'
وفي حال وجدت أخي القارئ أي صعوبة في الكود سأحاول بعون الله توضيحة :rolleyes:
لا تنسى ملف الـ XML المثال في الملف المرفق .. ;)