سؤال

أريد تحليل جدول HTML باستخدام حزمة أوتيل أوتال. أريد استخراج بعض بيانات العمود المحددة مسبقا من الجدول.

لكنني جديد في تحليل وحزمة أوتيل أتش تي أم أل جربت ولكني لا أعرف كيفية استخدام حزمة أجيليتي HTML لحاجتي.

إذا كان أي شخص يعرف بعد ذلك أعطني مثال إذا كان ذلك ممكنا

تعديل :

هل من الممكن تحليل جدول HTML مثل إذا كنا نريد استخراج بيانات أسماء الأعمدة المحددة فقط؟ مثل هناك 4 أعمدة الاسم، العنوان، Phno وأريد استخراج بيانات الاسم والعنوان فقط.

هل كانت مفيدة؟

المحلول

هناك مثال على ذلك في منتديات المناقشة هنا. وبعد قم بالتمرير لأسفل قليلا لرؤية إجابة الجدول. أتمنى أن توفر عينات أفضل كانت أسهل في العثور عليها.

تحرير: لاستخراج البيانات من أعمدة محددة، عليك أن تجد أولا <th> العلامات التي تتوافق مع الأعمدة التي تريدها وتذكر فهارسها. سوف تحتاج بعد ذلك إلى العثور على <td> العلامات لنفس الفهارس. على افتراض أنك تعرف فهارس الأعمدة التي يمكنك القيام بشيء مثل هذا:

HtmlDocument doc = new HtmlDocument();
doc.LoadHtml("http://somewhere.com");
HtmlNode table = doc.DocumentNode.SelectSingleNode("//table");
foreach (var row in table.SelectNodes("//tr"))
{
    HtmlNode addressNode = row.SelectSingleNode("td[2]");
    //do something with address here
    HtmlNode phoneNode = row.SelectSingleNode("td[5]");
    // do something with phone here
}

Edit2: إذا كنت لا تعرف فهارس الأعمدة، فيمكنك القيام بالأشياء الكاملة مثل هذا. أنا لم اختبر هذا.

HtmlDocument doc = new HtmlDocument();
doc.LoadHtml("http://somewhere.com");
var tables = doc.DocumentNode.SelectNodes("//table");

foreach(var table in tables)
{
    int addressIndex = -1;
    int phoneIndex = -1;
    var headers = table.SelectNodes("//th");
    for (int headerIndex = 0; headerIndex < headers.Count(); headerIndex++)
    {
        if (headers[headerIndex].InnerText == "address")
        {
            addressIndex = headerIndex;
        }
        else if (headers[headerIndex].InnerText == "phone")
        {
            phoneIndex = headerIndex;
        }
    }

    if (addressIndex != -1 && phoneIndex != -1)
    {
        foreach (var row in table.SelectNodes("//tr"))
        {
            HtmlNode addressNode = row.SelectSingleNode("td[addressIndex]");
            //do something with address here
            HtmlNode phoneNode = row.SelectSingleNode("td[phoneIndex]");
            // do something with phone here
        }
    }
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top