سؤال

كيف يمكنني استخدام حزمة HTML Agility للحصول على الفقرة الأولى من النص من جسم ملف HTML. أنا أقوم ببناء أداة تقديم رابط نمط Digg ، وأريد الحصول على العنوان والفقرة الأولى من النص. العنوان سهل ، أي اقتراحات لكيفية الحصول على الفقرة الأولى من النص من الجسم؟ أعتقد أنه يمكن أن يكون ضمن P أو Div اعتمادًا على الصفحة.

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

المحلول

هل هذا HTML الذي تتحكم فيه؟ إذا كان الأمر كذلك ، فيمكنك إعطاء P هوية أو فئة والعثور عليه عبر

//p[@id=\"YOUR ID\"] or //p[@class=\"YOUR CLASS\"]

تحرير: نظرًا لأنك لا تتحكم في HTML ، فربما ستعمل أدناه. يستغرق جميع htmltextnodes ويحاول العثور على مجموعة من النص أكبر من العتبة المحددة. إنه أبعد ما يكون عن الكمال ولكنه قد يجعلك تسير في الاتجاه الصحيح.

String summary = FindSummary(page.DocumentNode);

private const int THRESHOLD = 50;
private String FindSummary(HtmlAgilityPack.HtmlNode node) {
    foreach (HtmlAgilityPack.HtmlNode childNode in node.ChildNodes) {
        if (childNode.GetType() == typeof(HtmlAgilityPack.HtmlTextNode)) {
            if (childNode.InnerText.Length >= THRESHOLD) {
                return childNode.InnerText;
            }
        }

        String summary = FindSummary(childNode);
        if (summary.Length >= THRESHOLD) {
            return summary;
        }
    }

    return String.Empty;
}

نصائح أخرى

تستخدم Agility Pack XPath للاستعلام عن تحميل HTML ، يمكنك فقط استخدام عبارة XPATH بسيطة. شيء مثل...

HtmlDocument htmldoc = new HtmlDocument();
htmldoc.LoadHtml(content);

HtmlNodeCollection firstParagraph = htmldoc.DocumentNode.SelectNodes("//p[1]");
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top