Разбор HTML-файлов с использованием HtmlAgilityPack - PullRequest
0 голосов
/ 06 мая 2018

У меня есть несколько файлов Html, хранящихся в одном каталоге (TestReport1.html, TestReport2.html ....) со следующим содержимым:

<!DOCTYPE html>
<html>
  <body>
      <section class='summary'>
        <ul class='resultSummary'>
          <li class='Passed'>
            <div class='summaryLine'>
              <div class='summaryLabel'>Passed</div>
              <span class='summaryCount'>199</span>
            </div>
            <input type='checkbox' class='cbx_toggle' unchecked/>
          </li>
          <li class='Inconclusive'>
            <div class='summaryLine'>
              <div class='summaryLabel'>Inconclusive</div>
              <span class='summaryCount'>10</span>
            </div>
            <input type='checkbox' class='cbx_toggle' unchecked/>
          </li>
          <li class='NotImplemented'>
            <div class='summaryLine'>
              <div class='summaryLabel'>Not Implemented</div>
              <span class='summaryCount'>5</span>
            </div>
            <input type='checkbox' class='cbx_toggle' unchecked/>
          </li>
          <li class='Failed'>
            <div class='summaryLine'>
              <div class='summaryLabel'>Failed</div>
              <span class='summaryCount'>12</span>
            </div>
            <input type='checkbox' class='cbx_toggle' checked/>
          </li>
          <li id='summaryChart'</li>
        </ul>
      </section>
    </body>
</html>

Я хочу проанализировать каждый html-файл и получить значения из каждого списка узлов и связанных с ними сохраненных значений в вывод, похожий на этот:

TestReport1: Прошло: 199 Неопределённый: 10 Не реализовано: 5 Не удалось: 12

TestReport2: Прошло: 20 Неопределённый: 10 Не реализовано: 50 Ошибка: 120

Затем я хочу объединить все результаты в один итоговый файл html:

SummaryTestReport: Всего прошло: 199 Всего неокончательно: 10 Всего не выполнено: 5 Всего неудачно: 12

Любые намеки и идеи будут более чем оценены

Ответы [ 2 ]

0 голосов
/ 28 апреля 2019
// Description: HAP - Load (From File)
// Website: https://html-agility-pack.net/
// Run: https://dotnetfiddle.net/EsvZyg

// @nuget: HtmlAgilityPack

using System;
using System.Xml;
using HtmlAgilityPack;

public class Program
{
    public static void Main()
    {
        SaveHtmlFile();

        #region example

        var path = @"test.html";

        var doc = new HtmlDocument();
        doc.Load(path);

        var node = doc.DocumentNode.SelectSingleNode("//body");

        Console.WriteLine(node.OuterHtml);  

        #endregion
    }

    private static void SaveHtmlFile()
    {
        var html =
        @"<!DOCTYPE html>
<html>
<body>
    <h1>This is <b>bold</b> heading</h1>
    <p>This is <u>underlined</u> paragraph</p>
    <h2>This is <i>italic</i> heading</h2>
</body>
</html> ";

        var htmlDoc = new HtmlDocument();
        htmlDoc.LoadHtml(html);

        htmlDoc.Save("test.html");
    }
}
0 голосов
/ 15 мая 2018

Чтобы получить значение, вы можете использовать XPath. Пример:

"//*[@class='Inconclusive']/div/span"

C # HtmlAgilityPack

var html = new HtmlDocument();
html.LoadHtml(<html code>);
var xpath = "//*[@class='Inconclusive']/div/span";
var parse = html.DocumentNode.SelectSingleNode(xpath).InnerText;

Как получить XPath:

Screenshot

Синтаксис XPath

...