سؤال

وأواجه صعوبة في محاولة لإزالة شعبة مع معرف معين، وأبنائها باستخدام HTML أجيليتي حزمة. وأنا على يقين من أنني أنا فقط المفقودين خيار التكوين، ولكن لها الجمعة وأنا أعاني.

وويمتد HTML مبسطة:

<html><head></head><body><div id='wrapper'><div id='functionBar'><div id='search'></div></div></div></body></html>

وهذا هو أقصى ما أنا قد حصلت. الخطأ القيت من قبل رشاقة حزمة يبين أنه لا يمكن العثور على هيكل شعبة:

<div id='functionBar'></div>

وهنا هو رمز حتى الآن (مأخوذة من ستاكوفيرفلوو ....)

HtmlAgilityPack.HtmlDocument htmlDoc = new HtmlAgilityPack.HtmlDocument();
        // There are various options, set as needed
        //htmlDoc.OptionFixNestedTags = true;

        // filePath is a path to a file containing the html
        htmlDoc.LoadHtml(Html);

        string output = string.Empty;

        // ParseErrors is an ArrayList containing any errors from the Load statement
        if (htmlDoc.ParseErrors != null && htmlDoc.ParseErrors.Count > 0)
        {
            // Handle any parse errors as required

        }
        else
        {

            if (htmlDoc.DocumentNode != null)
            {
               HtmlAgilityPack.HtmlNode bodyNode  = htmlDoc.DocumentNode.SelectSingleNode("//body");

                if (bodyNode != null)
                {
                    HtmlAgilityPack.HtmlNode functionBarNode = bodyNode.SelectSingleNode ("//div[@id='functionBar']");

                    bodyNode.RemoveChild(functionBarNode,false);

                    output = bodyNode.InnerHtml;
                }
            }
        }
هل كانت مفيدة؟

المحلول

<اقتباس فقرة>   

وbodyNode.RemoveChild (functionBarNode، كاذبة)؛

ولكن functionBarNode ليس الطفل من bodyNode.

وماذا عن functionBarNode.ParentNode.RemoveChild(functionBarNode, false)؟ (وننسى قليلا عن إيجاد bodyNode).

نصائح أخرى

ويمكنك ببساطة الاتصال على:

var documentNode = document.DocumentNode;
var functionBarNode = documentNode.SelectSingleNode("//div[@id='functionBar']");
functionBarNode.Remove();

ومن أبسط من ذلك بكثير، ويفعل نفس الشيء على النحو التالي:

functionBarNode.ParentNode.RemoveChild(functionBarNode, false);

وهذا العمل لعدة:

HtmlDocument d = this.Download(string.Format(validatorUrl, Url));
foreach (var toGo in QuerySelectorAll(d.DocumentNode, "p[class=helpwanted]").ToList())
{
   toGo.Remove();
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top