تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
استخراج معلومات محددة من جدول html باستعمال HtmlAgilityPack
#6
(27-12-15, 12:30 AM)الشاكي لله كتب : تم التطبيق على مثالك والكود جاهز وهو كما يلي :

PHP كود :
...
...

 
          //remove columns
 
           table.Columns.Remove("column7");
 
           table.Columns.Remove("column6");
 
           table.Columns.Remove("column5");


 
           //re-arrange columns
 
           table.Columns["column2"].SetOrdinal(3);
 
           table.Columns["column3"].SetOrdinal(2);
 
        

            
// Show Result
 
           dataGridView1.DataSource table


دائما اخي عندما تتعامل مع html ، اولا اجلب جميع البيانات (سواء المهمة والغير مهمة).
بعدها قم بادخال البيانات داخل array او datatable او اي collection
بعدها بسهولة يمكنك عمل الفلترة بدوال الدوت نت كما رايت Smile


بارك الله فيك على تجاوبك 

تفكيرك للحل صراحة ابهرني ,,, لم افكر في الامر ,,,, معك حق استخراج المعلومات html من تم الى array او ,,, تبقى سهلة وعملية وتتعامل بليونة بالمعلومات ,,,,, راح اشتغل بها 

تشكر اخي شاكي لله
,,,

(27-12-15, 12:40 AM)الشاكي لله كتب : اسمح لي ان اقوم بإعادة تصوير الفيديو الخاص ب HAPXPathFinder حيث سأقوم ببناء نفس مثالك ولكن سنشرح كيفية التعامل مع HAPXPathFinder لكتابة الكود


تفضل اخي خد راحتك ,,, انا الي راح اشكرك انك راح تعمل شيء تفيد به الجميع ,,, بارك الله فيك 

=====

بالنسبة للحل لقد  وصلت لحل ,,, لكن طريقة حلك في الرد اعلى احسن ,,, الحل قام بمساعدتي به اخ ,,, وكان حله كالتالي الكود صحيح وشغال... مع بعض الاشكالات لو تعمل لها تحليل في الشرح 

تفضل هدا كود الحل ,,, للافادة 
=====
كود :
       HtmlAgilityPack.HtmlDocument html = new HtmlAgilityPack.HtmlDocument();
       // Load a file
       html.Load(@"c:\OneDrive\Work\MS Projects\text.html");      
       HtmlNode table = html.DocumentNode.SelectSingleNode("//table[@border='1']");
       DataTable dt = new DataTable();
       var rows = table.SelectNodes("tr");
       for (int i = 0; i < rows.Count; ++i)
       {
           //if row = then these are headers
           if (i == 0)
           {
               var cols = rows[i].SelectNodes("th");                    
               dt.Columns.Add(new DataColumn(cols[0].InnerText.ToString()));
               dt.Columns.Add(new DataColumn(cols[1].InnerText.ToString()));                    
               dt.Columns.Add(new DataColumn(cols[3].InnerText.ToString()));
               dt.Columns.Add(new DataColumn(cols[2].InnerText.ToString()));
               dt.Columns.Add(new DataColumn(cols[4].InnerText.ToString()));
           }

           //row>0 then data
           else
           {
               var cols = rows[i].SelectNodes("td");

               DataRow dr = dt.NewRow();
               dr[0] = cols[0].InnerText.ToString();
               dr[1] = cols[1].InnerText.ToString();
               dr[2] = cols[3].InnerText.ToString();
               dr[3] = cols[2].InnerText.ToString();
               dr[4] = cols[4].InnerText.ToString();
               dt.Rows.Add(dr);
           }
       }


الكود شغال مع متال صفحة html المرفق ,,, لكن هناك اشكال في كود الحل وهو في XPatch لانه غير عملي لو هناك جداول كتييرة ولها نفس الستايل هدا هو  ,, ("//table[@border='1']")
اتكلم عن هدا السطر 
====

كود :
HtmlNode table = html.DocumentNode.SelectSingleNode("//table[@border='1']")

====
ولما استعملت HAPXPathFinder  وقمت بجلب XPatch  يكون جيد وعملي ("//p[4]/table")  منطقيا كان يجب ان يشتغل لاني جربته في HAPXPathFinder واعطى الناتج  =>  لكن لم يشتغل الكود ,,, 

,,,, لو امكن ان تشير الى الامر في شرحك او  توضحه هنا ,,, لكي تعم الفائدة  ,,,, وهو انه لما  عوضت XPatch الكود  بالــ XPatch التاني ولم يشتغل الكود 

في انتظار مرورك 
,,,,
راح اكتر عليك اخي الشاكي لله ,,, لو لك وقت تمر على هدا الموضوع ,,, 
http://vb4arb.com/vb/thread-14243-post-68107.html

بالتوفيق لكــ 

,,,
الرد }}}
تم الشكر بواسطة: الشاكي لله


الردود في هذا الموضوع
RE: استخراج معلومات محددة من جدول html باستعمال HtmlAgilityPack - بواسطة Zads10 - 27-12-15, 01:58 AM


التنقل السريع :


يقوم بقرائة الموضوع: