HtmlAgilityPack: есть ли лучший способ написать это - PullRequest
0 голосов
/ 03 мая 2018

Я недавно начал экспериментировать с HtmlAgilityPack, и следующий код работает для того, чего я хочу достичь.

Но так как я только начал исследовать это, мне было интересно, есть ли лучший способ, чем использовать так много PreviousSibling тегов

var Application_Html = @"https://wiki.profittrailer.com/doku.php?id=application.properties";
        HtmlWeb Internet_Load_Connection = new HtmlWeb();
        var Application_Html_Loaded = Internet_Load_Connection.Load(Application_Html);
        var Wiki_Application_Part_Loaded = Application_Html_Loaded.DocumentNode.SelectSingleNode("//div[@class ='dw-content']");

        var divs = Application_Html_Loaded.DocumentNode.Descendants("div").Where(node => node.GetAttributeValue("class", "").Equals("level5")).Where(node => node.ParentNode.GetAttributeValue("class", "").Equals("dw-content")).ToList();

        foreach (var s in divs)
        {
            if (s.InnerText.IndexOf(" ") > 0)
            {
                if (s.PreviousSibling.PreviousSibling.Id.Contains("default_api") || s.PreviousSibling.PreviousSibling.Id.Contains("trading_api"))
                {
                    textBox1.AppendText(s.PreviousSibling.PreviousSibling.PreviousSibling.PreviousSibling.PreviousSibling.PreviousSibling.Id + "\n");
                    textBox1.AppendText(s.PreviousSibling.PreviousSibling.PreviousSibling.PreviousSibling.PreviousSibling.PreviousSibling.InnerText + "\n");
                    textBox1.AppendText(s.ChildNodes[3].InnerText + "\n");
                    textBox1.AppendText("\n");

                    textBox1.AppendText(s.PreviousSibling.PreviousSibling.Id + "\n");
                    textBox1.AppendText(s.PreviousSibling.PreviousSibling.InnerText + "\n");
                    textBox1.AppendText(s.ChildNodes[3].InnerText + "\n");
                    textBox1.AppendText("\n");                       
                }
                else
                {
                    textBox1.AppendText(s.PreviousSibling.PreviousSibling.Id + "\n");
                    textBox1.AppendText(s.PreviousSibling.PreviousSibling.InnerText + "\n");
                    textBox1.AppendText(s.ChildNodes[3].InnerText + "\n");
                    textBox1.AppendText("\n");
                }   
            }

        }

Идея заключается в том, чтобы очистить вики, чтобы увидеть, изменилось ли что-нибудь, и если да, чтобы обновить / уведомить меня, если изменения необходимы.

Пример HTML-кода для справки

<code><h5 id="tradingexchange">trading.exchange</h5>
<div class="level5">
<pre class="code file java">trading.<span class="me1">exchange</span> <span 
class="sy0">=</span> BITTREX

Используйте для установки обмена, к которому вы хотите подключить бота. Возможные значения (POLONIEX, BITTREX, BINANCE). Должно быть в столицах.

<ч />

все находится в div class = "dw-content" , который я извлекаю первым

h5 id необходим для проверки добавления новой опции

h5 innertext необходимо проверить форматирование

p innertext , чтобы проверить, обновлено ли описание или нет

...