Я новичок в программировании ООП, и мне было интересно, может ли кто-нибудь помочь мне. Я писал код, и я понял, что есть много дубликатов, что мне нужно для этой программы;Как прекратить делать повторяющийся код
class scrape
{
public void parse()
{
string Url = "http://www.blah.co.uk/";
HtmlWeb web = new HtmlWeb();
HtmlDocument doc = web.Load(Url);
Console.WriteLine("URL Loaded,");
scrape scrape = new scrape();
scrape.cats(doc);
}
private void cats(HtmlDocument doc)
{
HtmlNode topcats = doc.GetElementbyId("main_nav");
if (topcats != null)
{
IEnumerable<HtmlNode> topnav = topcats.Descendants("a");
foreach (var toplink in topnav)
{
if (toplink.Attributes.Contains("href"))
{
if (toplink.Attributes["href"].Value.EndsWith(".html"))
{
Console.WriteLine("http://www.blah.co.uk/" + toplink.Attributes["href"].Value);
Console.WriteLine("++++++++ " + toplink.InnerText + " +++++++++++");
//sub cats
HtmlWeb cat_web = new HtmlWeb();
HtmlDocument cat_doc = cat_web.Load("http://www.blah.co.uk/" + toplink.Attributes["href"].Value);
HtmlNode subcats = cat_doc.GetElementbyId("pagenav");
if (subcats != null)
{
IEnumerable<HtmlNode> subnav = subcats.Descendants("a");
foreach (var sublink in subnav)
{
if (sublink.Attributes.Contains("href"))
{
if (sublink.Attributes["href"].Value.EndsWith(".html"))
{
Console.WriteLine("http://www.blah.co.uk/" +sublink.Attributes["href"].Value);
Console.WriteLine(sublink.InnerText);
}
}
}
}
}
}
}
}
Console.ReadLine();
}
}
}
сверху может кто-то пожалуйста, помогите мне, чтобы уменьшить дублирование в коде и как я могу идти об этом в C#. Любая помощь или информация были бы весьма благодарны.
Вы можете использовать XPath вместо ручного перемещения DOM. – Dai
Я бы также уменьшил отступы, инвертируя инструкции 'if', поэтому их легче читать. т.е. 'if (topcats == null) return;' или 'if (! toplink.Attributes.Contains (" href ")) continue;' –
Вы должны опубликовать это на [Code Review Stack Exchange] (http: // codereview .stackexchange.com /) website –