سلام وقت بخیر
من از پک HtmlAgility برای Parse کردن سایت ها استفاده میکنم که توی دات نت های مختلف و برنامه نویسی مترو قابل استفاده هست.
HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
doc.LoadHtml(richTextBox3.Text);
HtmlAgilityPack.HtmlNode node = doc.DocumentNode.SelectNodes("//body//section")[1];
string html = node.InnerHtml.Replace("\"","'");
string stt = "<div class='pos-summary'>";
html = html.Substring(html.IndexOf(stt) + stt.Length);
html = stt +html.Substring(0, html.LastIndexOf("</div>") + 0);
HtmlAgilityPack.HtmlDocument doc2 = new HtmlAgilityPack.HtmlDocument();
doc2.LoadHtml(html);
HtmlAgilityPack.HtmlNodeCollection nodes = doc2.DocumentNode.SelectNodes("//a");
string content = null;
foreach (HtmlAgilityPack.HtmlNode item in nodes)
{
content += "Inner: " + item.InnerText + "\r\nAttribute: " +item.GetAttributeValue("href", null) + "\r\n\r\n\r\n\r\n";
}
من این کد رو برای گرفتن مقادیر سایتی در سی شارپ دسکتاپ استفاده کردم و کار هم داد اما چون توی توی محیط برنامه نویسی METro(ویندوز استور و ویندوزفون)
فضای نامی System.Xml.XPath وجود نداره کد من توی این دو با مشکل برمیخوره و دو تابع SelectNodes و SelectSingleNode که از این کلاس استفاده میکنند اصلا وجود ندارن.
توی سایت های خارجی هم جستجو کردم گفتن تنها راهش استفاده از Linq هست. من زیاد با Linq کار نکردم واسه همین دقیق نمیدونم چیکار کنم.(توی Linq همدو تابع SelectNodes و SelectSingleNode برای این مترو وجود نداره)
یک مثال توی سایت ها برای HtmlAgility پیدا کردم:
HtmlWeb web = new HtmlWeb();
HtmlDocument doc = web.Load(url);
var travelList = new List<HtmlNode>();
foreach (var matchingDiv in doc.DocumentNode.DescendantNodes().Where(n=>n.Name == "div" && n.Id == "myTrips"))
{
travelList.AddRange(matchingDiv.DescendantNodes().Where(n=> n.Name == "li"));
}
ممنون