سؤال

أحاول استرداد صورة محددة من مستند HTML، باستخدام حزمة أوتال HTML و XPath:

//div[@id='topslot']/a/img/@src

بقدر ما أستطيع أن أرى، فهو يجد سمة SRC، لكنها ترجع علامة IMG. لماذا هذا؟

أتوقع أن يتم تعيين فصل Innerhtml / Innertext أو شيء ما، لكن كلاهما سلاسل فارغة. يتم تعيين Outerhtml على علامة IMG كاملة.

هل هناك أي وثائق لحزمة أجيليتي HTML؟

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

المحلول

حزمة أجريتي HTML لا يدعم اختيار السمة.

نصائح أخرى

يمكنك الاستيلاء مباشرة على السمة إذا كنت تستخدم HtmlNavigator في حين أن.

//Load document from some html string
HtmlDocument hdoc = new HtmlDocument();
hdoc.LoadHtml(htmlContent);

//Load navigator for current document
HtmlNodeNavigator navigator = (HtmlNodeNavigator)hdoc.CreateNavigator();

//Get value from given xpath
string xpath = "//div[@id='topslot']/a/img/@src";
string val = navigator.SelectSingleNode(xpath).Value;

يمكنك استخدام طريقة "GetAttributeValue".

مثال:

//[...] code before needs to load a html document
HtmlAgilityPack.HtmlDocument htmldoc = e.Document;
//get all nodes "a" matching the XPath expression
HtmlNodeCollection AllNodes = htmldoc.DocumentNode.SelectNodes("*[@class='item']/p/a");
//show a messagebox for each node found that shows the content of attribute "href"
foreach (var MensaNode in AllNodes)
{
     string url = MensaNode.GetAttributeValue("href", "not found");
     MessageBox.Show(url);
}

سوف دعم HTML Agility حزمة قريبا.

http://htmlagimespack.codeplex.com/thread/view.aspx؟threadid=204342.

قراءة وكتابة السمات مع حزمة أجيليتي HTML

يمكنك كل من قراءة وتعيين السمات في HTMLAGIMESPACK. يحدد هذا المثال علامة <HTML> وحدد سمة "Lang" (اللغة) إذا كان موجودا ثم يقرأ ويكتب إلى سمة "Lang".

في المثال أدناه، doc.loadhtml (this.all)، "this.all" هو تمثيل سلسلة وثيقة HTML.

اقرا و اكتب:

            HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
            doc.LoadHtml(this.All);
            string language = string.Empty;
            var nodes = doc.DocumentNode.SelectNodes("//html");
            for (int i = 0; i < nodes.Count; i++)
            {
                if (nodes[i] != null && nodes[i].Attributes.Count > 0 && nodes[i].Attributes.Contains("lang"))
                {
                    language = nodes[i].Attributes["lang"].Value; //Get attribute
                    nodes[i].Attributes["lang"].Value = "en-US"; //Set attribute
                }
            }

يقرأ فقط:

            HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
            doc.LoadHtml(this.All);
            string language = string.Empty;
            var nodes = doc.DocumentNode.SelectNodes("//html");
            foreach (HtmlNode a in nodes)
            {
                if (a != null && a.Attributes.Count > 0 && a.Attributes.Contains("lang"))
                {
                    language = a.Attributes["lang"].Value;
                }
            }

استخدمت الطريقة التالية للحصول على سمات الصورة.

var MainImageString  = MainImageNode.Attributes.Where(i=> i.Name=="src").FirstOrDefault();

يمكنك تحديد اسم السمة للحصول على قيمتها؛ إذا كنت لا تعرف اسم السمة، فقم بإعطاء نقطة توقف بعد أن أحضرت العقدة ورؤية سماتها عن طريق تحوم فوقه.

آمل أن أساعدت.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top